Запуск бота в фоновом режиме
Для обеспечения стабильной и надежной работы скрипта, написанного на Python или любом другом языке программирования, на сервере, необходимо выполнить настройку автоматического запуска и перезапуска.
Подготовка
1. Сначала загрузите файлы бота на сервер, например, в директорию /home/me. Затем создайте виртуальное окружение следующей командой:
python3 -m venv venv
2. Активируйте виртуальное окружение:
source ./venv/bin/activate
3. Установите все необходимые пакеты, перечисленные в файле requirements.txt:
pip install -r requirements.txt
Если файл requirements.txt с перечнем пакетов отсутствует, вы можете установить требуемые пакеты вручную.
Screen — простой метод
Для простого запуска скрипта в фоновом режиме можно использовать утилиту screen, которая позволяет создавать неограниченное количество сессий в терминале.
Для начала, установите утилиту screen из репозитория:
sudo apt install screen
Затем запустите новую сессию с помощью команды:
screen
Активируйте виртуальное окружение и запустите бота следующими командами:
source ./venv/bin/activate
python main.py
Теперь можно свернуть текущую сессию, удерживая комбинацию клавиш Ctrl + A, а затем нажав клавишу D.
Вот некоторые основные команды для работы с screen:
- screen — создать новую сессию;
- screen -ls — просмотреть список всех сессий;
- screen -r <имя_сессии> — открыть конкретную сессию (если у вас всего одна сессия, то имя можно не указывать).
Внутри сессии:
- Ctrl + A + D — свернуть сессию;
- Ctrl + A + K — завершить сессию.
Этот метод довольно прост в настройке и не требует создания дополнительных конфигурационных файлов. Однако, если сервер перезагрузится или возникнет ошибка при работе скрипта, вам потребуется вручную перезапустить бота.
Systemd
Давайте рассмотрим запуск вашего приложения в роли службы с использованием Systemd - менеджера системы и служб Linux, который эффективно управляет службами, определенными в конфигурационных файлах, и осуществляет их запуск.
Для начала создайте новый юнит для systemd следующей командой:
sudo nano /lib/systemd/system/bot.service
Добавьте следующее содержимое в созданный юнит:
[Unit]
Description=Служба Таймвеб-бота
After=network.target
[Service]
Type=idle
Restart=always
RestartSec=3
User=root
WorkingDirectory=/home/me/bot
ExecStart=/home/me/bot/venv/bin/python /home/me/bot/main.py
[Install]
WantedBy=multi-user.target
Здесь:
- Description — это описание службы,
- ExecStart — указывает путь до интерпретатора Python и скрипта,
- User — определяет пользователя, от которого будет запущена служба,
- Restart=always — указывает на необходимость перезапуска бота после возникновения ошибки.
Завершите настройку, перезагрузив юниты, включив автозапуск и активировав бота:
sudo systemctl daemon-reload
sudo systemctl enable bot.service
sudo systemctl start bot.service
Теперь убедитесь в том, что бот работает. Если по какой-то причине бот не отвечает, вы можете попробовать запустить его в терминале, чтобы выявить возможные ошибки.
PM2
Если вы предпочитаете еще один способ запуска бота, то можете воспользоваться менеджером процессов PM2. PM2 автоматически перезапускает бота в случае ошибки и сохраняет логи его работы.
Для начала, установите необходимые пакеты Node.js и npm следующими командами:
sudo apt install nodejs
sudo apt install npm
После чего установите PM2 с помощью команды:
npm install pm2 -g
Для запуска вашего бота перейдите в каталог с ним и выполните следующую команду:
pm2 start main.py --interpreter=python3
Теперь у вас есть два рабочих варианта для запуска бота: через Systemd и с использованием PM2. Каждый из них обладает своими особенностями и подходит для разных сценариев использования. Выберите тот, который соответствует вашим требованиям и предпочтениям.