Самый простой способ сделать это - поместить это в /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
предложенным ранее).