Главная/Боты/Бот 24/7

Как запустить бота 24/7 на своём сервере

Как запустить бота 24/7: оформить его службой systemd с Restart=always или контейнером Docker с политикой restart unless-stopped, тогда процесс сам поднимется после ошибки и после перезагрузки сервера. Ниже готовый unit-файл, настройки Docker и проверка, которая показывает, что бот действительно не уснёт ночью.

4 мин чтенияДанные проверены 16 октября 2026

Ответ за 30 секунд

Боту нужна служба systemd или Docker с политикой restart, а не screen и не nohup. Задайте паузу между рестартами, ограничьте размер логов и проверьте всё на деле: убейте процесс и перезагрузите сервер.

Сервер работает круглосуточно, а не пока открыт ноутбук. Почасовая оплата, root-доступ.

Как проверить, что бот переживёт сбой и перезагрузку

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.

SBРедакция SelfBase · обновлено 16 октября 2026

Запустите свой сервер за пару минут

Почасовая оплата: тестовый стенд на сутки стоит десятки рублей, а не месячный тариф.

  • NVMe-диски и гарантированная доля процессора
  • Root-доступ и любой софт, от Docker до игровых серверов
  • Маркетплейс: 91 приложение в один клик
  • Бесплатный перенос проекта силами специалистов
Проверка