Как сделать что бы телеграм бот автоматически перезапускался после того как выдаст ошибку?

Приветствую, у меня есть телеграм бот на питоне, он задеполин на линукс сервер, но возникает такая проблема, что иногда бот падает и я просто физически не могу постоянно его перезапускать. У меня есть написанный скрипт, но я взял его у одного человека, он писал что этот скрипт будет перезапускать бота после рестарта серверов телеграма. Возможно ли вообще написать скрипт, который там раз в 2 секунды будет проверять работает ли бот, и если нет запускать его заново. Ниже прикреплю код скрипта который у меня есть сейчас. Буду благодарен за помощь.

[Unit]
Description=Telegram bot 'Airdrop'
After=syslog.target
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/usr/local/bin/bot
ExecStart=/usr/bin/python3 /usr/local/bin/bot/airdrop.py
RestartSec=10
Restart=always

[Install]
WantedBy=multi-user.target
  • Вопрос задан
  • 3738 просмотров
Пригласить эксперта
Ответы на вопрос 4
InternetMaster
@InternetMaster
Интернет
Зачем раз в 2 секунды проверять работоспособность скрипта, и если упал - перезапускать? Такой блевотины я давно не видел. Тут же надо сделать обработчик исключений (ошибок) стандартный.

В Python за это отвечает try-except. Добавляешь бесконечный цикл, и в случае не истины (поломки) он вернется к действиям, которые должны будут исполниться при истине.

while True:
    try:
        bot.polling()
    except:
        continue


Вместо bot.polling() нужно добавить любой другой метод запускающий long polling, если в скрипте используется библиотека альтернативная PyTelegramBotAPI
Ответ написан
bravebug
@bravebug
Если Linux машина:
Я недавно для этой цели на Raspberry Pi установил пакет supervisor с демоном supervisord
Он позволяет автоматически запускать нужные скрипты при запуске системы, перезапускать их при падении (можно указать количество перезапусков, после которого перезапуски будут прекращены (для безнадёжных скриптов)), логировать вывод в stdout.
Но нужно будет немного почитать как пользоваться этим инструментом.
https://supervisord.readthedocs.io/en/latest/insta...
Ответ написан
paran0id
@paran0id
Умный, но ленивый
Это не скрипт, это unit-файл для systemd. Он будет перезапускать, и он будет следить сам.
Ответ написан
Buchachalo
@Buchachalo
Судя по ответам выше автора, все работает условно. Бот не падает и на /start отвечает. Проблема в логике внутри бота.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы