Как запустить бота в фоне (screen и systemd для чайников)
Хочу себе такие же кнопкиЧто вы получите в конце урока
- Поймёте, почему фоновые процессы нужны для ботов и как они работают.
- Научитесь запускать бота в 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 Подготовка к работе
-
Создайте отдельного пользователя для бота (по‑безопасности).
sudo useradd -m -s /bin/bash botuser sudo passwd botuser -
Скопируйте ваш код в каталог
/home/botuser/bot/.sudo mkdir -p /home/botuser/bot sudo chown -R botuser:botuser /home/botuser/bot # Предположим, что ваш бот – это файл bot.py -
Установите зависимости (если нужен 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 Как обновить код без простоя
- Остановите сервис:
sudo systemctl stop bot.service. - Обновите файлы (git pull, копирование и т.п.).
- Запустите снова:
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. Практика для закрепления
-
Создайте screen‑сессию с именем
testbot, запустите в ней простой скриптwhile true; do echo $(date); sleep 2; done. Отсоединитесь, вернитесь и убедитесь, что вывод продолжает появляться. -
Сделайте unit‑файл для того же скрипта, используя шаблон выше. Проверьте, что после перезагрузки сервера скрипт стартует автоматически.
-
Измените код бота (например, добавьте вывод
print("Hello from bot")в начале). Перезапустите сервис с помощьюsystemctl restart. Убедитесь, что в журнале появился новый вывод. -
Настройте автоперезапуск: заставьте скрипт выйти с кодом 1 (например,
exit 1). Посмотрите, какsystemdавтоматически перезапустит его, и сколько раз он попытается это сделать (параметрStartLimitBurst). -
Сравните ресурсы: запустите одновременно 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+
Видеочат с случайным собеседником онлайн
Видеообщения по всему миру