У меня очень простой скрипт на Python, который я хотел бы всегда запускать на своем сервере Ubuntu 12.04. Я думал об использовании upstart + monit. Проблема в том, что эти инструменты кажутся довольно сложными для простого смертного, такого как я, и я не могу найти простой пример в Интернете.
Является ли upstart + monit overkill? Кто-нибудь знает более простую альтернативу или хороший учебник для upstart + monit? Если я просто хочу убедиться, что скрипт всегда запущен, требуется ли мониторинг вообще?
Простейший способ сделать это - поместить это в /etc/init/something.conf
:
start on runlevel [2345]
stop on runlevel [016]
respawn
exec python /path/to/your/script.py
Respawn запустит его, если он убит или выйдет с ненулевым значением (как неперехваченное исключение). Это будет работать, начиная с Ubuntu 10.04.
Если у вас есть 12.04, вы можете получить больше фантазии. Выше будет запускать ваш скрипт от имени root. В 12.04 вы можете добавить setuid / setgid:
start on runlevel [2345]
stop on runlevel [016]
respawn
setuid nobody
setgid nogroup
exec python /path/to/your/python.py
Если ваш скрипт завершает работу, когда нет доступной сети, и вы планируете запустить его по нестабильному сетевому соединению, хорошо, вы должны это исправить и просто сделать это остаться в живых / повторить попытку. Но если вы не можете, вам также может понадобиться запускать его вручную всякий раз, когда подключается сетевое устройство. Таким образом, вы можете поместить это в /etc/network/if-up.d/yourscript
(сделать его исполняемым с помощью chmod + x)
#!/bin/sh
exec start wait-for-state WAITER=$IFACE-yourscript WAIT_FOR=something
Где yourscript - это просто нечто произвольное и уникальное для этого конкретного скрипта, а «нечто» - то же самое, что и задание имя (например, /etc/init/something.conf
, предложенный ранее).
Обычный подход старых времен заключался в том, чтобы записать файл, содержащий метку времени или идентификатор процесса, в /tmp
, а затем проверить, был ли этот идентификатор процесса все еще запущен или, соответственно, если метка времени была еще недавно.
Также вы можете сделать простое while [ 1 ]; do phyton-script.ph; done
, которое перезапустит скрипт в случае его возврата.
Для получения дополнительной информации, пожалуйста, предоставьте больше информации о вашем сценарии. Особенно о том, почему вы ожидаете, что он неожиданно выйдет из строя или потерпит крах.