Faire un daemon sous Linux

Sous linux, le terme daemon désigne un ou des processus qui s’exécutent en arrière plan. C’est l’équivalent des services sous Windows.

Les étapes suivantes visent à démarrer un programme exécutable automatiquement lors du lancement. Il est toujours possible d’arrêter, de lancer ou de relancer le daemon en exécutant manuellement le script dans une console.

1 ) Mettre un script dans le répertoire /etc/init.d/

Vous trouverez dans ce répertoire le fichier skeleton, qui est un canevas simple à modifier. Faites une copie du fichier et changer le nom pour qu’il représente bien l’application qui sera lancée. Dans notre exemple, il s’agit d’un petit programme qui gère le clignotement d’une led de statut. J’ai donc renommé le fichier stateLed.

cp /etc/init.d/skeleton /etc/init.d/stateLed

Voici les lignes que vous devrez modifier :

DESC="Description of the service"
NAME=daemonexecutablename
DAEMON=/usr/sbin/$NAME
DAEMON_ARGS="--options args"
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME

Voici les lignes modifiées pour mon exemple :

DESC="State led service"
NAME=stateLed
DAEMON=/usr/bin/$NAME
DAEMON_ARGS=" 4"
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME

2) Pour que le script puisse s’exécuter, il faut maintenant le rendre exécutable. Entrez la commande suivante dans une console :

sudo chmod +x stateLed

3 )Pour que l’appel du programme par le script fonctionne, il faut mettre le fichier exécutable dans le répertoire /usr/bin/.

Si le programme requiert divers appels de commande, il est aussi possible de mettre un script dans le répertoire /usr/sbin/. Voici un exemple :

#!/bin/bash
/etc/init.d/stateLed start

4) La dernière étape valide le script dans la liste des scripts à considérer.

update-rc.d stateLed defaults

Vous devriez obtenir un message semblable à ceci :

Adding system startup for /etc/init.d/stateLed ...    
/etc/rc0.d/K20stateLed -> ../init.d/stateLed 
/etc/rc1.d/K20stateLed  -> ../init.d/stateLed 
/etc/rc6.d/K20stateLed  -> ../init.d/stateLed     
/etc/rc2.d/S20stateLed -> ../init.d/stateLed     
/etc/rc3.d/S20stateLed  -> ../init.d/stateLed     
/etc/rc4.d/S20stateLed  -> ../init.d/stateLed     
/etc/rc5.d/S20stateLed  -> ../init.d/stateLed

Ça devrait maintenant fonctionner.

 

Laisser un commentaire

Votre adresse courriel ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire le pourriel. En savoir plus sur comment les données de vos commentaires sont utilisées.