Как запустить бота в фоне (screen и systemd для чайников)
Дата публикации: 18.05.2026

Как запустить бота в фоне (screen и systemd для чайников)

Хочу себе такие же кнопки
ccb9a536

Что вы получите в конце урока

  • Поймёте, почему фоновые процессы нужны для ботов и как они работают.
  • Научитесь запускать бота в screen – простейший способ «запустить и забыть».
  • Овладеете systemd – современным менеджером сервисов, который будет автоматически перезапускать вашего бота после падения или перезагрузки сервера.
  • Получите готовый шаблон unit‑файла и проверенный набор команд, которые можно скопировать в любой VPS‑инстанс VDSina.

1. Почему нужен фоновой процесс?

Проблема Что происходит без фонового режима Как решаем
Сессия SSH закрывается Бот завершает работу, потому что процесс привязан к вашему терминалу. Запуск в screen или systemd.
Сервер перезагружается Бот не стартует автоматически, придётся вручную запускать его каждый раз. systemd‑ автозапуск и автоперезапуск.
Бот падает из‑за ошибки Процесс просто исчезает, и вы не знаете, что произошло. systemd‑ мониторинг и автоматический рестарт.

2. Запуск бота в screen

2.1 Что такое screen?

screen – это терминальный мультиплексор. Представьте, что ваш терминал – это телевизор, а screen – это переключатель каналов, позволяющий держать несколько «программ» (сессий) открытыми одновременно и возвращаться к любой из них в любой момент.

2.2 Установка screen

# На Debian/Ubuntu
sudo apt update && sudo apt install -y screen

# На CentOS/RHEL
sudo yum install -y screen

2.3 Создание и запуск сессии

# Создаём новую сессию с именем mybot
screen -S mybot

После этого вы окажетесь в обычном терминале, но уже внутри screen. Запускаете ваш бот, например:

python3 bot.py

2.4 Отсоединение от сессии

Нажмите Ctrl‑A, затем D. Вы увидите сообщение Detached from screen 'mybot'. Бот продолжит работать в фоне, а ваш терминал вернётся к обычному вводу.

2.5 Возвращение к сессии

screen -r mybot      # если только одна сессия
# или
screen -r <ID>       # если их несколько, ID берётся из `screen -ls`

2.6 Полезные команды screen

Команда Описание
screen -ls Список всех сессий.
screen -X -S mybot quit Принудительно завершить сессию.
Ctrl‑A K Убить текущий процесс внутри сессии.
Ctrl‑A ? Показать справку по комбинациям клавиш.

2.7 Как проверить, что бот живёт?

ps aux | grep bot.py

Если процесс найден, всё в порядке.


3. Запуск бота через systemd

3.1 Что такое systemd?

systemd – это «операционная система» внутри Linux, которая управляет сервисами (демонами). Он умеет:

  • Запускать сервисы при загрузке.
  • Автоматически перезапускать их после падения.
  • Записывать логи в journalctl.

3.2 Подготовка к работе

  1. Создайте отдельного пользователя для бота (по‑безопасности).

    sudo useradd -m -s /bin/bash botuser
    sudo passwd botuser
  2. Скопируйте ваш код в каталог /home/botuser/bot/.

    sudo mkdir -p /home/botuser/bot
    sudo chown -R botuser:botuser /home/botuser/bot
    # Предположим, что ваш бот – это файл bot.py
  3. Установите зависимости (если нужен virtualenv).

    sudo -u botuser bash -c "
    cd /home/botuser/bot
    python3 -m venv venv
    source venv/bin/activate
    pip install -r requirements.txt
    "

3.3 Создание unit‑файла

Создайте файл /etc/systemd/system/bot.service:

sudo nano /etc/systemd/system/bot.service

Содержимое (скопируйте полностью, заменив пути под свои):

[Unit]
Description=My Telegram Bot
After=network.target

[Service]
Type=simple
User=botuser
WorkingDirectory=/home/botuser/bot
ExecStart=/home/botuser/bot/venv/bin/python3 /home/botuser/bot/bot.py
Restart=on-failure
RestartSec=5
StandardOutput=journal
StandardError=journal
Environment=PYTHONUNBUFFERED=1

[Install]
WantedBy=multi-user.target

Пояснения к ключевым параметрам

Параметр Что делает
User=botuser Запускает процесс от имени безопасного пользователя.
WorkingDirectory Папка, в которой будет работать бот.
ExecStart Полный путь к интерпретатору и скрипту.
Restart=on-failure Перезапускать только при ошибке (не при обычном kill).
RestartSec=5 Подождать 5 секунд перед рестартом, чтобы не «залипать».
StandardOutput=journal Перенаправлять вывод в системный журнал.

Сохраните файл и выйдите (Ctrl‑O, Enter, Ctrl‑X).

3.4 Перезагрузка конфигурации и запуск сервиса

sudo systemctl daemon-reload                # перечитать новые unit‑файлы
sudo systemctl enable bot.service           # добавить в автозапуск
sudo systemctl start bot.service            # запустить сейчас

3.5 Проверка статуса и логов

sudo systemctl status bot.service
sudo journalctl -u bot.service -f          # «‑» = следить в реальном времени

Если в логах вы видите Bot started (или ваш собственный вывод), всё работает.

3.6 Остановка, перезапуск, отключение

Команда Описание
sudo systemctl stop bot.service Остановить бот.
sudo systemctl restart bot.service Перезапустить (полезно после изменения кода).
sudo systemctl disable bot.service Убрать из автозапуска.
sudo systemctl enable bot.service Добавить в автозапуск.

3.7 Как обновить код без простоя

  1. Остановите сервис: sudo systemctl stop bot.service.
  2. Обновите файлы (git pull, копирование и т.п.).
  3. Запустите снова: sudo systemctl start bot.service.

Для «горячего» обновления можно использовать ExecReload в unit‑файле, но это уже продвинутый уровень.


4. Сравнение screen и systemd

Критерий screen systemd
Простота установки Да, один пакет. Уже установлен в современных дистрибутивах.
Автозапуск после перезагрузки Нет (нужен вручную screen -r). Да (enable).
Автоматический перезапуск при падении Нет (нужно писать скрипты). Да (Restart=on-failure).
Управление логами Через screen -L или отдельные файлы. Через journalctl.
Подходит для разработки Отлично – быстро «запустить‑запомнить». Лучше для продакшна.
Нагрузка на ресурсы Минимальная, но каждый screen – отдельный процесс. Минимальная, управляется ядром.

Вывод: используйте screen для коротких тестов и отладки, а systemd – для постоянных, надёжных сервисов.


5. Полезные лайфхаки

Лайфхак Как выполнить
Запуск сразу в фоне без screen nohup python3 bot.py > bot.log 2>&1 &
Ограничить потребление RAM Добавьте в unit‑файл MemoryLimit=200M.
Отправлять уведомления в Telegram при падении В ExecStartPost вызвать скрипт, который шлёт сообщение через Bot API.
Проверить, какие процессы запущены от имени botuser ps -u botuser -f
Сделать резервную копию unit‑файла sudo cp /etc/systemd/system/bot.service /root/bot.service.backup

6. Практика для закрепления

  1. Создайте screen‑сессию с именем testbot, запустите в ней простой скрипт while true; do echo $(date); sleep 2; done. Отсоединитесь, вернитесь и убедитесь, что вывод продолжает появляться.

  2. Сделайте unit‑файл для того же скрипта, используя шаблон выше. Проверьте, что после перезагрузки сервера скрипт стартует автоматически.

  3. Измените код бота (например, добавьте вывод print("Hello from bot") в начале). Перезапустите сервис с помощью systemctl restart. Убедитесь, что в журнале появился новый вывод.

  4. Настройте автоперезапуск: заставьте скрипт выйти с кодом 1 (например, exit 1). Посмотрите, как systemd автоматически перезапустит его, и сколько раз он попытается это сделать (параметр StartLimitBurst).

  5. Сравните ресурсы: запустите одновременно 5 экземпляров бота через screen и 5 через systemd. С помощью top или htop оцените, насколько отличаются потребления памяти и процессорного времени.


Важно: При работе с 🏰 VDSina не забывайте ставить в ссылки параметр ?partner=5095. Например, официальная страница документации по screen: https://vdsina.ru/docs/screen?partner=5095.

Удачной работы, и пусть ваш бот будет работать без перебоев! 🚀


Английский видеочат для путешествий
CamZamZam - онлайн фото с вебкамеры с эффектами
Чат рулетка 2026: Интерактивные элементы
Чат-рулетка: случайный собеседник в одно нажатие
Чат рулетка в 2026: будущие функции
Интерьер с использованием текстиля
Как настроить бэкапы для вашего сайта на хостинге Host.bg
Как настроить SSL-сертификат для сайта на Host.bg
Как обновить PHP на хостинге Host.bg
Как решить проблемы с загрузкой сайта на Host.bg
Какие бывают ЛОР болезни у детей
Калькулятор зарплаты SEO-оптимизатора
Кассовые терминалы с оплатой картами
Монетизация через платные услуги
Мск: ИП или ООО — лучший старт для бизнеса?
Общение в интернете без риска
Общение вживую через экран
Онлайн-связь
Оптимизация производительности баз данных на хостинге Host.bg
Ошибки при настройке хостинга и их решения
Проблемы с доменами и их решения на хостинге Host.bg
Сколько стоит биткоин
Сравнение ценовых диапазонов хостинга Host.bg
Сумки с бусинами
Техника для строительства загородных трасс
Трубная продукция для трубопроводных конструкций
Узбекские фильмы фэнтези
Видео рулетка 18+
Видеочат с случайным собеседником онлайн
Видеообщения по всему миру
рейтинг хостингов 2026 Быстрые VDS серверы