Дискорд-бот: запуск и присмотр
Запуск дискорд-бота на VDS под systemd, ограничение памяти, чтение логов, борьба с ограничением частоты запросов и обновление без простоя.
Обновлено 23 августа 2026 г.
Дискорд-бот держит постоянное соединение WebSocket с шлюзом Discord, поэтому ему нужна машина, которая не выключается. По ресурсам он скромен, но в отличие от телеграм-бота хуже переносит перезапуски: после каждого идёт повторное подключение к шлюзу.
Установка
useradd -r -m -d /srv/dbot -s /usr/sbin/nologin dbot
cd /srv/dbot && sudo -u dbot git clone https://github.com/you/bot.git .
sudo -u dbot npm ci --omit=dev
install -o dbot -g dbot -m 600 /dev/null /srv/dbot/.env
В .env кладите токен и идентификаторы. Токен из панели разработчика Discord — это полный доступ к боту, обращайтесь с ним как с паролем.
Для Python-библиотек порядок тот же с виртуальным окружением, см. приложение на Python.
Служба
/etc/systemd/system/dbot.service:
[Unit]
Description=Discord bot
After=network-online.target
Wants=network-online.target
[Service]
User=dbot
WorkingDirectory=/srv/dbot
EnvironmentFile=/srv/dbot/.env
ExecStart=/usr/bin/node index.js
Restart=always
RestartSec=15
MemoryMax=512M
NoNewPrivileges=true
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable --now dbot
RestartSec=15 вместо стандартных пяти секунд: при обрыве связи с шлюзом частые перезапуски приводят к временной блокировке подключений со стороны Discord.
MemoryMax не даёт боту с утечкой памяти утащить за собой всю машину — особенно важно на VDS-1 с 2 ГБ.
Присмотр
systemctl status dbot
journalctl -u dbot -f
journalctl -u dbot --since today -p err
systemctl show dbot -p NRestarts
NRestarts — самый полезный показатель: если счётчик растёт каждый час, бот падает, а Restart=always это маскирует.
Расход памяти конкретной службы:
systemctl status dbot | grep Memory
Общая картина по машине — графики процессора, памяти и трафика в «Обзоре» панели /hosting/vds/m/<id>.
Ограничение частоты запросов
Discord ограничивает частоту вызовов API. Признаки — ошибки 429 в логах и «залипающие» команды. Что помогает:
- не отправлять сообщения в цикле без пауз;
- редактировать одно сообщение вместо отправки новых;
- кэшировать справочные данные, а не запрашивать их на каждое событие;
- использовать очередь на Redis для массовых рассылок.
Обновление
cd /srv/dbot
sudo -u dbot git pull
sudo -u dbot npm ci --omit=dev
systemctl restart dbot
journalctl -u dbot -n 50
Последняя строка обязательна: убедитесь, что бот подключился к шлюзу, а не упал на новой зависимости.
Частые ошибки
| Симптом | Причина |
|---|---|
| Бот в сети, но не отвечает на команды | Не включены нужные интенты в панели разработчика |
| Постоянные переподключения | Слишком короткий RestartSec или падение в обработчике события |
Invalid token | Токен перевыпущен, .env не обновлён |
| Команды дублируются | Работают две копии бота — проверьте ps aux | grep node |
| Машина уходит в своп | Нет MemoryMax, утечка в коде |
Не запускайте бота под
screenилиtmux. Сессия переживёт разрыв SSH, но не перезагрузку машины, и через месяц вы забудете, где он вообще запущен.