Table des matières
Faire un Demon (ou service) sous Linux
Le terme demon (=Disk and Execution MONitor) désigne un processus qui s'exécute en arrière-plan plutôt que sous le contrôle direct d'un utilisateur. (Wikipedia)
Soit un tout petit serveur qui tourne sous Linux.
Pour démarrer le serveur, il faut entrer login, mot de passe, lancer le terminal, s'identifier en tant que root et lancer le script de démarrage…
Un demon permet de lancer un script avec toutes les autorisations nécessaires, avant l'ouverture de la session.
Pré-requis
-
un programme en shell (ex : LAUNCHER) qui lance votre application. Copiez-le si besoin dans /usr/bin :
sudo cp /dir1/dir2/launcher /usr/bin/launcher
Tout se passe dans les dossiers /etc/init.d/ et /usr/bin/
-
Le dossier /etc/init.d contient tous les scripts demons.
-
Le dossier /usr/bin/ contient les exécutables. Il fait partie du $PATH et ses programmes peuvent être appelés directement sans spécifier de chemin.
Première étape
Tout d'abord, il faut créer le script d'exécution qui démarre le programme.
Pour cela, copiez le fichier modèle /etc/init.d/skeleton :
-
sudo cp /etc/init.d/skeleton /etc/init.d/launcher
Les lignes importantes de ce fichier sont :
PATH=/usr/sbin:/usr/bin:/sbin:/bin DESC="Description du service" NAME=nomdudemon DAEMON=/usr/bin/$NAME DAEMON_ARGS="--options args" PIDFILE=/var/run/$NAME.pid SCRIPTNAME=/etc/init.d/$NAME
Ouvrez avec les droits d'administration le fichier /etc/init.d/launcher pour le modifier comme ceci :
-
Remplissez avec vos paramètres :
DESC | Courte description de votre launcher |
---|---|
NAME | Nom de votre exécutable (ici, launcher) |
DAEMON_ARGS | options de lancement (paramètres au lancement de la commande) |
-
Ne touchez pas à : PATH, DAEMON, PIDFILE, SCRIPTNAME
Rendez ce script exécutable :
-
sudo chmod +x /etc/init.d/launcher
Autres étapes
Le programme qui gère les demons est update-rc.d qui crée des liens depuis /etc/rc0.d/launcher vers /etc/init.d/launcher.
cf. l'article Update-rc.d du man traduit (sur http://manpage.ubuntu.com)
Il faut maintenant enregistrer votre script pour qu'il soit pris en compte. Tapez :
$ sudo update-rc.d launcher defaults Adding system startup for /etc/init.d/lighttpd ... /etc/rc0.d/K20/lighttpd -> ../init.d/lighttpd /etc/rc1.d/K20/lighttpd -> ../init.d/lighttpd /etc/rc6.d/K20/lighttpd -> ../init.d/lighttpd /etc/rc2.d/S20/lighttpd -> ../init.d/lighttpd /etc/rc3.d/S20/lighttpd -> ../init.d/lighttpd /etc/rc4.d/S20/lighttpd -> ../init.d/lighttpd /etc/rc5.d/S20/lighttpd -> ../init.d/lighttpd
update-rc.d | pour mettre à jour |
---|---|
launcher | nom de votre script |
defaults | options par défaut : placement en bout de file d'attente, pour éviter les conflits |
Pour supprimer un demon
Pour supprimer le demon launcher, il faut exécuter la suite de commandes :
/etc/init.d/launcher stop | Termine le programme |
---|---|
update-rc.d -f launcher remove | Supprime l'enregistrement du script |
rm /etc/init.d/launcher | pour supprimer le skeleton modifié |
rm /usr/bin/launcher | pour supprimer la copie de votre script |
Votre init.d est maintenant nettoyé.
Conclusion
Vous pouvez maintenant :
-
exécuter votre script avec
sudo service launcher start
-
l'arrêter avec
sudo service launcher stop
.
-
le redémarrer avec
sudo service launcher restart
-
vérifier son état avec
sudo service launcher status
Pour que votre programme soit en tâche de fond, ouvrez avec les droits d'administration le fichier /etc/init.d/launcher pour le modifier au niveau de la fonction do_start() :
- /etc/init.d/launcher
do_start() { # Return # 0 if daemon has been started # 1 if daemon was already running # 2 if daemon could not be started 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 # Add code here, if necessary, that waits for the process to be ready # to handle requests from services started subsequently which depend # on this one. As a last resort, sleep for some time. }
start-stop-daemon est la commande principale. Analysons ses options :
–start | pour démarrer le script |
---|---|
–quiet | pour rendre le script silencieux (CQFD) |
–background | pour mettre le script en arrière-plan (CQFD) |
–make-pidfile | pour faire un fichier de processus (pour pouvoir forcer l'arrêt plus tard) |
–pidfile $PIDFILE | pour localiser le pidfile créé ci-dessus |
–exec $DAEMON | pour lancer le programme |
–test | pour tester le programme |
Problèmes connus
Voir aussi
-
(fr) le tutoriel de openclassroom : http://fr.openclassrooms.com/informatique/cours/faire-un-demon-sous-linux
Contributeurs principaux : Jamaique.