Daemoniser un script python

Votre script python fonctionne, vous êtes content et vous le faites savoir. Mais un problème subsiste : comment faire pour que votre script se lance au démarrage de votre machine ?

J’ai expérimenté la chose sur une Raspberry Pi équipé de Raspbian, donc pour ceux qui se poserait la question cette technique faite pour Debian à la base fonctionne très bien sur une Raspberry.

Transformer notre script en service

Pour commencer nous allons faire en sorte que notre script puisse être lancé en tant que service. C’est classe, c’est propre et c’est pratique.

Surtout, vérifier que vous n’ayez aucun bug (aucune exception) dans votre script avant de commencer !!

Si vous êtes comme moi, vous utilisez Git pour gérer votre code et vous rassemblez vos sources dans un dossier généralement nommé dev/. Sauf que votre script doit se trouver dans /usr/sbin/ pour que notre méthode fonctionne, donc ce que nous allons faire (et que je trouve très intelligent pour les futures mise à jour du script) c’est un lien sur notre repo.

sudo ln -s /dev/project/script.py /usr/sbin/script sudo chmod +x /usr/sbin/script  

/!\ N’oubliez pas de rendre executable vos scripts dans votre repo aussi.

Les scripts de services doivent se trouver dans /etc/init.d/ , c’est donc à cet endroit que nous allons nous rendre. Un script d’exemple existe pour nous guider : skeleton. On le copie-colle et on change ce que l’on a besoin dedans.

cd /etc/init.d/ sudo cp skeleton script sudo vim script sudo chmod +x script

Dans ce fichier changer les lignes suivantes avec vos valeurs :

# Provides : script
# Short-Description : Blabla 
# Description : BlaBlaBla [...] 
NAME=script  
DESC="blabla"  
OPTIONS="--options args" [...] 

dostart(){  
    start-stop-daemon --start --quiet --background --make-pidfile --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
                 || return 1 
    start-stop-daemon --start --quiet --background --make-pidfile --pidfile $PIDFILE --exec $DAEMON -- \ 
                 $DAEMON_ARGS \ 
                 || return 2 
}

Essayons tout ça. Si tout s’est bien passé status vous renverra l’état attendu en fonction de vos ordres.

sudo service script start sudo service script status >> [ok] script is running... sudo service script stop sudo service script status >> [Fail] script is not running. FAILED..

Lancement automatique au démarrage

Voici venue la partie la plus simple. Elle consiste en une seule commande :

sudo update-rc.d script default 99  

Pas de stress, update-rc.d va s’occuper de tout pour vous.

Le paramètre defaults sert à indiquer que vous souhaitez les paramètres par défaut pour votre deamon. Le 99 est l’ordre de lancement au boot. Avec la valeur 99 on est sur que notre script s’exécute après tous les autres.

Si vous souhaitez supprimer un deamon vous pouvez faire :

sudo update-rc.d script remove  

Nathanaël Cherrier

Ingenieur de développement mobile et web pour Econocom. Passionné par le développement en général, mais plus particulièrement par le développement web et mobile, je vous raconte mes petits secrets.

Subscribe to Mindsers IT

Get the latest posts delivered right to your inbox.

or subscribe via RSS with Feedly!