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.
sudo cp /dir1/dir2/launcher /usr/bin/launcher
Tout se passe dans les dossiers /etc/init.d/ et /usr/bin/
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 :
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) |
Rendez ce script exécutable :
sudo chmod +x /etc/init.d/launcher
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 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é.
Vous pouvez maintenant :
sudo service launcher start
sudo service launcher stop
.
sudo service launcher restart
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() :
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 |
Contributeurs principaux : Jamaique.