Bonjour à tous.

Dans cet article nous allons voir comment créer un Démon Linux à l’aide du skeleton fourni dans les distributions Linux.

Vous avez certainement déjà voulu lancer un programme automatiquement sans vouloir le faire vous même après le démarrage de votre machine (surtout quand on est pas à proximité immédiate …)

Alors voyons comment faire pour résoudre cet ennui qui n’en est pas un ;)

Si vous vous rappelez l’article sur le démarrage automatisé d’un Démon Linux, vous savez qu’un système Linux utilise des liens symboliques présents dans le dossier associé au niveau d’exécution défini à la machine.

Ainsi si le niveau d’exécution est de 2 alors le système lancera tous les liens symboliques présents dans le répertoire /etc/rc2.d/. Ces liens « pointent » (généralement) vers les scripts présents dans le dossier /etc/init.d/.

Ces derniers sont chargés de reconnaitre les arguments qu’on lui passe, à savoir START, STOP, RESTART, STATUT, etc ….. et de demander au Démon d’effectuer l’action associée à ces arguments.

De ce fait on se retrouve avec la hiérarchie suivante :

exemple avec le démon apache

La partie qui nous intéresse se trouve dans /etc/init.d/. En effet, comme je le disais juste avant, c’est ce script qui est chargé d’interpréter les arguments qu’on lui donne.

C’est là que notre skeleton va nous aider. Un skeleton c’est quoi? et bien c’est le squelette des scripts que je viens de vous décrire.

Ce fichier se trouve toujours dans /etc/init.d/ sous le nom de skeleton, je vous invite donc à y jeter un coup d’œil avec votre éditeur préféré :)

Maintenant si vous regardez bien, le code semble assez complexe. Mais un skeleton montre comment faire, après à vous d’ajuster le code en fonction de votre démon.

Je vais vous faire un petit exemple tout simple. Admettons que j’ai en ma possession un script très puissant qui est chargé de « pinguer » google.

Je veux l’automatiser et de ce fait le transformer en Démon. Et bien j’écris le script qui sera dans /etc/init.d/ et qui appellera mon script surpuissant.

Déjà voici le script surpuissant (évitez le plus possible les boucles while true, bien que dans certains cas on ne puisse pas faire autrement. Ici elle est présente pour faire un test simple sans complexité) :

#!bin/bash

while true

do

ping -c 4 www.google.fr >> /root/result.txt

done

On le nommera Demon_ping_google et on y fait un petit chmod +x dessus afin de le rendre exécutable. Copiez le ensuite dans /root/ (pour le test).

Maintenant passons au script qui s’occupera de notre petit Démon. En s’appuyant sur le skeleton on voit que le script fait la différence entre les arguments avec un case

Nous allons faire 4 cas : START, STOP, RESTART et * (argument non compris), on va éviter le STATUT. Et nous allons créer 4 fonctions START, STOP, RESTART et INCONNU.

Et voici ce que ça donne :

#!bin/bash

#variables

DEAMON_NAME=Demon_ping_google

DEAMON_ACCESS=/root/$DEAMON_NAME

PID_FILE=/var/run/ping_google.pid

#demarre le demon

Start() {

echo « Demarrage ping_google »

#demarre le demon en enregistrant son pid dans le fichier definit en haut afin de pouvoir retrouver le processus

start-stop-daemon — start –quiet –background –pidfile $PID_FILE –make-pidfile –exec $DEAMON_ACCESS

echo « ping_google en fonction »

}

#arrete le demon

Stop() {

echo « arret de ping_google en cour »

#stop le demon avec le pid contenu dans le fichier definit

start-stop-daemon –stop –quiet –pidfile $PID_FILE –name $DAEMON_NAME

#efface le pid pusique le demon a ete tue

rm -f $PID_FILE

echo « ping_google termine »

}

#redemarre le demon

Restart() {

Stop

Start

}

#permet de montrer les differentes commandes du demon

Inconnu() {

echo  « Usage $0 {start|stop|restart} »

}

#effectue l’action par rapport aux arguments passes

case  « $1″ in

start)

Start

;;

stop)

Stop

;;

restart)

Restart

;;

*)

Inconnu

exit 1

;;

esac

Nommer le lanceur_demon, faites un chmod +x afin de le rendre exécutable et copiez le dans /etc/init.d/.

Maintenant lancez le Démon avec la commande suivante :

/etc/init.d/lanceur_demon start

Voila vous devez voir afficher à l’écran « Demarrage ping_google » et « ping_google en fonction » et si vous faites un petit ls dans /root/ vous devriez avoir un ping_google.pid et un result.txt présents.

Si vous faites un :

/etc/init.d/lanceur_demon stop

Vous devez voir affiché à l’écran « arret de ping_google en cour«  et « ping_google termine«  et si vous faites un petit ls dans /root/ vous devriez avoir seulement result.txt de présent.

Bien, maintenant vous savez faire un démon mais, je tiens à préciser que mon script de démarrage est loin d’être complet, en effet il faudrait tester les variables de retour (comme dans le skeleton) afin de savoir si tout s’est bien déroulé correctement.

Vous pouvez aussi faire démarrer des programmes compilés qui prennent en arguments les valeurs que vous définirez. Beaucoup d’autres choses sont possibles comme l’ajout d’un système de log pour connaître les dates de lancements, d’arrêt, savoir s’il y a eu des problèmes.

Enfin je vous le redis étudiez bien le skeleton et vous aurez la possibilité de faire ce que vous voulez quand vous voulez avec vos programmes ;)

@ plus tard