Daemoniser un script python

Cet article est libre d'accès pour tous grâce à ceux qui soutiennent notre blog indépendant.

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 poseraient la question cette technique faite pour Debian à la base fonctionne très bien sur une Raspberry Pi.

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

Rejoins 250+ développeurs de notre liste de diffusion et sois reçois les articles directement dans ta boite mail.

S'inscrire à la newsletter

Aucun spam. Désabonnes-toi en un seul clic à tout moment.

Si vous avez des questions ou des remarques/conseils, n'hésitez pas à laisser un commentaire plus bas ! Je serais ravis de vous lire. Et si vous aimez l'article, n'oubliez pas de le partager avec vos amis.