Как узнать причину прекращения работы скрипта python в фоновом режиме?
Я купил сервер VDS несколько дней назад, чтобы у меня работали боты Telegram 24/7.
Я не могу держать оболочку всегда открытой, поэтому я решил использовать этот "хак":
1. В скрипт Python добавьте #!/usr/bin/python3.4
2. sudo chmod u+x mybot.py
sudo nohup ./mybot.py &
Скрипт успешно запускается и работает нормально, однако через 8-10 часов он со временем перестает отвечать! Я вижу это в ps -aux
выходной хотя.
Чтобы быть уверенным, что это проблема VDS, я запустил ботов на своем микрокомпьютере ODroid-C1 на один день. Проблем не найдено, оба скрипта работали нормально.
Основная проблема в том, что я не могу понять, почему именно эти боты на VDS перестают отвечать. Есть ли способ узнать?
PS На ODroid и VDS установлена Ubuntu 14.04.
1 ответ
Вы можете попробовать 2 других способа:
Первый способ, с экрана:
sudo apt-get install screen
затем запустите screen, выполнив ту же команду, и запустите скрипт в 'screen' без nohup.
sudo ./mybot.py
Ctrl + A Ctrl + D, чтобы отсоединиться от экрана, отключиться от сеанса SSH. В следующий раз, когда вы видите, приложение зависло типа
screen -r
прикрепить, чем сеанс экрана, где у вас работает приложение Python
Второе - добавьте перенаправление из stdout и stderr вашего скрипта в лог-файл (ы)
sudo nohup ./mybot.py >> /var/log/mybot_out.log 2>>/var/log/mybot_err.log &
или в один файл:
sudo nohup ./mybot.py >> /var/log/mybot_out.log 2>>&1 &
затем изучите файл журнала после следующего зависания.
РЕДАКТИРОВАТЬ: Если вы не видите ничего полезного от вывода приложения до stdout, stderr, когда он завис, - установите strace и присоедините его к процессу с вашим скриптом:
strace -p <PID>
Может быть, вы можете найти что-то полезное из этого. Это если не показывает ничего полезного (опять же) - перезапустите приложение из strace.
... strace ./mybot.py
лучше с выводом в лог файл, если у вас достаточно свободного места. Затем исследуйте последние тысячи строк журнала (может содержать много дубликатов)