Сообщить об ошибке.

Перезапуск телеграмм-бота в случае ошибки

При использовании телеграмм-бота на сервере, работающим под linux перезапустить упавший скрипт Python, в случае использования bot.polling, можно при помощи systemd или supervisor.

Разберем случай с менеджером системных и служб systemd.

Systemd представляет собой программный комплекс, который содержит набор системных компонентов для операционных систем Linux. Его основная цель - унифицировать конфигурацию и поведение служб в дистрибутивах Linux. Основным компонентом systemd является "менеджер систем и служб" - система инициализации, используемая для загрузки пользовательского пространства и управления пользовательскими процессами.

Проще говоря, системный менеджер systemd запустит любой скрипт (в том числе и скрипт Python телеграмм-бота) при старте системы, и будет перезапускать его в случае падения.

Установим системный менеджер systemd, если отсутствует:

$ apt-get install systemd

Создадим файл bot.service в директории /etc/systemd/system с таким содержанием:

$ sudo touch /etc/systemd/system/bot.service

Теперь откроем его

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

и вставим следующее содержимое:

[Unit]
Description=Telegram bot %name%
After=syslog.target
After=network.target

[Service]
Type=simple
User=root
# замените на свой путь к каталогу, где находится `bot.py`
WorkingDirectory=/usr/local/bin/bot  # или другой путь
# замените на свой путь к телеграмм-боту `bot.py`
ExecStart=/usr/bin/python3 /usr/local/bin/bot/bot.py  
RestartSec=10
Restart=always

[Install]
WantedBy=multi-user.target

в консоли выполним:

# перечитываем конфигурацию 
# (обнаружит файл `bot.service`)
$ sudo systemctl daemon-reload
# подключаем демон `bot.service`
$ sudo systemctl enable bot
# запускаем демон `bot.service`
$ sudo systemctl start bot
# смотрим статус демона `bot.service`
$ sudo systemctl status bot

ГОТОВО!

Теперь перезапустить/остановить телеграмм-бота можно системными командами Linux:

# перезапуск
$ sudo systemctl restart bot
# остановка
$ sudo systemctl stop bot
# запуск после остановки
$ sudo systemctl start bot