A maneira mais simples de fazer isso é colocar isso em /etc/init/something.conf
:
start on runlevel [2345]
stop on runlevel [016]
respawn
exec python /path/to/your/script.py
O reaparecimento iniciará novamente se for morto ou sair diferente de zero (como uma exceção não capturada). Isso funcionará desde o Ubuntu 10.04.
Se você tem 12.04, pode ficar mais chique. O acima irá executar seu script como root. Na versão 12.04, você pode adicionar setuid / setgid:
start on runlevel [2345]
stop on runlevel [016]
respawn
setuid nobody
setgid nogroup
exec python /path/to/your/python.py
Se o seu script sair quando não houver rede disponível e você planeja executá-lo em uma conexão de rede instável, conserte-o e mantenha-o vivo / tente novamente. Mas, se não puder, talvez seja necessário iniciá-lo manualmente sempre que um dispositivo de rede aparecer. Então você pode colocar isso em /etc/network/if-up.d/yourscript
(torne-o executável com chmod + x)
#!/bin/sh
exec start wait-for-state WAITER=$IFACE-yourscript WAIT_FOR=something
Onde o seu script é apenas algo arbitrário e exclusivo para esse script específico, e "algo" é igual ao nome do trabalho (como o /etc/init/something.conf
sugerido anteriormente).