Documentation du Dr FRAPPE

Ce wiki regroupe les résultats de mes expériences en informatique accumulés au cours de mes recherches sur le net.

Dans la mesure du possible, j'ai cité mes sources ; il en manque certainement… :-)

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 :
DESCCourte description de votre launcher
NAMENom de votre exécutable (ici, launcher)
DAEMON_ARGSoptions 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.dpour mettre à jour
launchernom de votre script
defaultsoptions 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 :

–startpour démarrer le script
–quietpour rendre le script silencieux (CQFD)
–backgroundpour mettre le script en arrière-plan (CQFD)
–make-pidfilepour faire un fichier de processus (pour pouvoir forcer l'arrêt plus tard)
–pidfile $PIDFILEpour localiser le pidfile créé ci-dessus
–exec $DAEMONpour lancer le programme
–testpour tester le programme

Problèmes connus

Voir aussi


Contributeurs principaux : Jamaique.

QR Code
QR Code Faire un Demon (ou service) sous Linux (generated for current page)