@EugeneVKruglov

Как перезапустить на Линукс упавшего бота, если он многопоточный?

Суть вопроса такова: на сервере Линукс запущен Питон-бот, который из основного потока запускает еще один параллельный поток для обслуживания БД. Бот работает как сервис. Перезапуск должен происходить через 10 секунд после того, как бот по какой-то причине "упал" (RestartSec=10). Однако этого не происходит, и, похоже, из-за того, что когда бот "лежит", параллельный поток продолжает работать. Видимо, ОС воспринимает сервис как рабочий и не перезапускает его. Что можно сделать в этой ситуации, чтобы перезапустить сервис?
Сразу скажу, в Линуксе пока ничего не понимаю!
Это файл сервиса:
[Unit]
Description=Telegram bot 'name'
After=syslog.target
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/usr/local/bin/AF_Bot
ExecStart=/usr/bin/python3 /usr/local/bin/AF_Bot/main.py
StandardOutput=file:/usr/local/bin/AF_Bot/af_console.log
StandardError=file:/usr/local/bin/AF_Bot/af_errors.log
RestartSec=10
Restart=always
 
[Install]
WantedBy=multi-user.target
  • Вопрос задан
  • 267 просмотров
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
1. Починить бота, чтобы не падал. Лови исключения в обработчиках событий, для начала. А если падает не из-за исключения там (а, например, инет отвалился) - ставь обработку исключений на тело бота и заверни всё в цикл while, например.
2. Пометить вспомогательный поток как daemon. Скрипт завершается, когда не остаётся активных потоков - при этом daemon-потоки не считаются. Смотри документацию на модуль threading.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы