Как запустить бота 24/7 на своём сервере
Как запустить бота 24/7: оформить его службой systemd с Restart=always или контейнером Docker с политикой restart unless-stopped, тогда процесс сам поднимется после ошибки и после перезагрузки сервера. Ниже готовый unit-файл, настройки Docker и проверка, которая показывает, что бот действительно не уснёт ночью.
Ответ за 30 секунд
Боту нужна служба systemd или Docker с политикой restart, а не screen и не nohup. Задайте паузу между рестартами, ограничьте размер логов и проверьте всё на деле: убейте процесс и перезагрузите сервер.
Сервер работает круглосуточно, а не пока открыт ноутбук. Почасовая оплата, root-доступ.
Как проверить, что бот переживёт сбой и перезагрузкуRestart=alwaysперезапуск службы systemd
unless-stoppedполитика Docker для бота
10 секунддолжен проработать контейнер
01 · 1 мин
Почему бот, запущенный из консоли, перестаёт отвечать#
Бот, запущенный командой в SSH-сессии, живёт ровно до её закрытия. screen, tmux и nohup спасают от закрытия терминала, но не от двух других причин: необработанного исключения в коде и перезагрузки сервера после обновления ядра. В обоих случаях бот молчит, пока вы не зайдёте и не запустите его руками.
Решение одно: отдать процесс системе, которая следит за ним сама. На Linux это systemd или Docker. Зачем вообще нужен сервер и сколько ресурсов брать, разобрано в обзоре аренда сервера для бота.
02 · 1 мин
Служба systemd для бота: unit-файл с перезапуском#
Пример для бота на Node.js, для Python меняется только ExecStart (подробно в разборе бот на Python на сервере):
# /etc/systemd/system/mybot.service
[Unit]
Description=My bot
After=network-online.target
Wants=network-online.target
StartLimitIntervalSec=300
StartLimitBurst=5
[Service]
User=bot
WorkingDirectory=/opt/mybot
EnvironmentFile=/opt/mybot/.env
ExecStart=/usr/bin/node /opt/mybot/index.js
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now mybot
journalctl -u mybot -f
- Restart=always перезапускает бота при любом завершении, on-failure только при ошибке. Для бота, который не должен выходить сам, берите always.
- RestartSec=10 даёт паузу: если сеть пропала, бот не будет долбить API мессенджера каждую долю секунды.
- StartLimitBurst и StartLimitIntervalSec останавливают попытки, если бот упал 5 раз за 5 минут. Значит, ошибка в коде или токене, и бесконечный рестарт её не исправит.
03 · 1 мин
Бот в Docker: какую политику restart выбрать#
| Политика | Что делает |
|---|---|
| no | Не перезапускает, это значение по умолчанию |
| on-failure[:N] | Перезапускает при ненулевом коде выхода, можно ограничить число попыток; после перезапуска самого Docker контейнер не поднимет |
| always | Перезапускает всегда; остановленный вручную контейнер снова стартует после перезапуска Docker |
| unless-stopped | Как always, но остановленный вручную контейнер остаётся остановленным |
Для бота обычно берут unless-stopped: он переживёт падение и перезагрузку, но не воскреснет, если вы остановили его намеренно. Политика начинает действовать, только когда контейнер проработал хотя бы 10 секунд, поэтому бот, который падает сразу при старте, не уйдёт в бесконечный цикл.
docker run -d --name mybot --restart unless-stopped --env-file .env mybot:latest
docker update --restart unless-stopped mybot
sudo systemctl enable docker
Последняя команда нужна, чтобы сам Docker стартовал при загрузке сервера: без него ни одна политика не сработает.
04 · 1 мин
Логи бота: как не заполнить диск за месяц#
Бот, который пишет каждое сообщение в лог, за месяцы способен занять весь диск младшего VPS, и тогда упадёт уже всё. Ограничьте журнал заранее.
- Для systemd: строка
SystemMaxUse=500Mв /etc/systemd/journald.conf и перезапуск systemd-journald. - Для Docker: общий лимит в /etc/docker/daemon.json, он действует на новые контейнеры.
{
"log-driver": "json-file",
"log-opts": { "max-size": "10m", "max-file": "3" }
}
Инструмент · 1 мин
Как проверить, что бот переживёт сбой и перезагрузку#
Настройку проверяют поломкой: найдите PID через systemctl status mybot и выполните sudo kill -9 PID, через RestartSec бот должен ответить снова. Затем sudo reboot. Снаружи за ботом может следить Uptime Kuma: она присылает уведомление, если бот перестал отвечать на проверку.
Проверка: бот переживёт сбой?
Пройдите тесты по очереди и отметьте пройденные
06 · 1 мин
Вопросы о запуске бота 24/7#
Чем screen или tmux хуже службы systemd для бота?
Они держат процесс после закрытия SSH, но не перезапускают его после ошибки и не запускают после перезагрузки сервера. Служба systemd делает и то, и другое.
Почему systemd перестал перезапускать бота?
Сработал лимит запусков: бот падал слишком часто, и systemd пишет в статусе, что запросы на старт повторяются слишком быстро. Исправьте ошибку по журналу и выполните systemctl reset-failed mybot.
Какую политику restart выбрать для бота в Docker?
unless-stopped: контейнер поднимется после сбоя и перезапуска Docker, но останется выключенным, если вы остановили его сами.
Почему этому можно верить
Как мы проверяли
Источники цифр на этой странице: VPS и VDS серверы Таймвеб Клауд, timeweb.cloud/services/vds-vps, проверено 14 октября 2026; Маркетплейс приложений Таймвеб Клауд, timeweb.cloud/marketplace, проверено 14 октября 2026; Документация Docker: автоматический запуск контейнеров и политики restart, docs.docker.com/engine/containers/start-containers-automatically, проверено 14 октября 2026.
Запустите свой сервер за пару минут
Почасовая оплата: тестовый стенд на сутки стоит десятки рублей, а не месячный тариф.
- NVMe-диски и гарантированная доля процессора
- Root-доступ и любой софт, от Docker до игровых серверов
- Маркетплейс: 91 приложение в один клик
- Бесплатный перенос проекта силами специалистов