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.