La manière la plus simple de faire cela est de le placer dans /etc/init/something.conf
:
start on runlevel [2345]
stop on runlevel [016]
respawn
exec python /path/to/your/script.py
Respawn le redémarrera s'il est tué ou s'arrête avec un code de sortie non nul (comme une exception non capturée). Cela fonctionnera même sur Ubuntu 10.04.
Si vous avez la version 12.04 vous pouvez avoir quelque chose de plus sophistiqué. Ce qui précède exécutera votre script en tant que root. Dans la version 12.04 vous pouvez ajouter setuid/setgid :
start on runlevel [2345]
stop on runlevel [016]
respawn
setuid nobody
setgid nogroup
exec python /path/to/your/python.py
Si votre script se termine quand il n'y a pas de réseau disponible et que vous prévoyez de l'exécuter sur une connexion réseau instable, eh bien, vous devriez corriger cela et le maintenir en vie/relancer. Mais si ce n'est pas possible, vous devrez peut-être aussi le démarrer manuellement chaque fois qu'un périphérique réseau se connecte. Vous pouvez donc le placer dans /etc/network/if-up.d/yourscript
(rendez-le exécutable avec chmod +x)
#!/bin/sh
exec start wait-for-state WAITER=$IFACE-yourscript WAIT_FOR=something
Où yourscript est juste quelque chose d'arbitraire et unique pour ce script particulier, et "something" est identique au nom de job (comme suggéré précédemment dans /etc/init/something.conf
).