Подскажите
В случае с python, я не стал systemd использовать, а вместо него
Supervisor.
Если не установлен, то установить его можно так:
sudo apt install supervisor
На мой вкус, удобнее и проще.
Шикарно работает.
И не забывай, что твой скрипт надо сделать исполняемым:
sudo chmod a+x /usr/bin/bot.py
После установки настраиваешь (базовые настройки) его конфиг под систему одной командой в Терминале:
sudo sh -c 'echo_supervisord_conf > /etc/supervisor/supervisord.conf'; cd /etc/supervisor; sudo sed -i -e 's|file=/tmp/supervisor.sock|file=/var/run/supervisor.sock|' -e 's/;chmod=0700/chmod=0766/' -e 's/\;\[inet_http_server]/[inet_http_server]/' -e 's/;port=127.0.0.1:9001/port=*:9001/' -e 's/;user=chrism/user=root/' -e 's|logfile=/tmp/supervisord.log|logfile=/var/log/supervisor/supervisord.log|' -e 's|pidfile=/tmp/supervisord.pid|pidfile=/var/run/supervisord.pid|' -e 's/nodaemon=false/nodaemon=true/' -e 's|serverurl=unix:///tmp/supervisor.sock|serverurl=unix:///var/run/supervisor.sock|' -e 's/\;\[include]/[include]/' supervisord.conf; sudo sh -c "echo 'files = /etc/supervisor/conf.d/*.conf' >> supervisord.conf"
Создаешь юнит-конфиг бота, например
bot.conf в папке:
/etc/supervisor/conf.d и перезапускаешь Supervisor:
echo -e '; supervisor config file\n\n[program:01-Bot]\ncommand = python3 bot.py\ndirectory = /usr/bin\nstdout_logfile_maxbytes = 50MB\nstdout_logfile = /var/log/bot.log\nstderr_logfile = /var/log/bot.log\nstartsecs = 10\nnpriority = 999\nautostart = true\nautorestart = true' | sudo tee /etc/supervisor/conf.d/bot.conf > /dev/null; sudo supervisorctl reread; sudo supervisorctl update; sudo systemctl restart supervisor.service
Выглядеть он будет так:
; supervisor config file
[program:01-Bot]
command = python3 bot.py
directory = /usr/bin
stdout_logfile_maxbytes = 50MB
stdout_logfile = /var/log/bot.log
stderr_logfile = /var/log/bot.log
startsecs = 10
npriority = 999
autostart = true
autorestart = true
Управлять можно через web-морду (если установлен LAMP) по адресу:
localhost:9001
или, если оного нет, в Терминале:
sudo supervisorctl
help - выведит список команд:
supervisor> help
default commands (type help <topic>):
=====================================
add exit open reload restart start tail
avail fg pid remove shutdown status update
clear maintail quit reread signal stop version
supervisor>
Т.е., чтобы увидеть статус вашего бота, после приглашения supervisor> вводите
status 01-Bot и получите вывод:
01-Bot RUNNING pid 2613, uptime 3:32:47
где
RUNNING указывает на то, что всё Ок. Процесс запущен и работает.
Если будет ошибка, то и вывод будет
ERRORили просто в терминале вводите:
sudo supervisorctl status
- статус всех процессов Supervisor
или
sudo supervisorctl status 01-Bot
- статус конкретно вашего бота.
Лог
bot.log будет лежать в папке:
/var/log
Полный путь лог-файла:
/var/log/bot.log
И усё!
Всегда после старта/перезагрузки системы у тебя будет рабочий бот в фоне, в качестве сервиса.