La forma más sencilla de hacer esto es colocar esto en /etc/init/something.conf
:
start on runlevel [2345]
stop on runlevel [016]
respawn
exec python /path/to/your/script.py
Respawn lo iniciará nuevamente si se elimina o sale de un valor distinto de cero (como una excepción no detectada). Esto funcionará volviendo a Ubuntu 10.04.
Si tiene 12.04 puede ser más elegante. Lo anterior ejecutará su script como root. En 12.04 puede agregar setuid / setgid:
start on runlevel [2345]
stop on runlevel [016]
respawn
setuid nobody
setgid nogroup
exec python /path/to/your/python.py
Si su script se cierra cuando no hay una red disponible y planea ejecutarlo en una conexión de red inestable, bueno, debe solucionarlo y hacer que se mantenga vivo / reintentar. Pero si no puede, es posible que también deba iniciarlo manualmente cuando aparezca un dispositivo de red. Entonces puede colocar esto en /etc/network/if-up.d/yourscript
(hacerlo ejecutable con chmod + x)
#!/bin/sh
exec start wait-for-state WAITER=$IFACE-yourscript WAIT_FOR=something
Donde su script es simplemente algo arbitrario y exclusivo de este script en particular, y "algo" es el mismo que el nombre del trabajo (como el /etc/init/something.conf
sugerido anteriormente).