Apportez votre aide…
Ceci est une ancienne révision du document !
Comment transformer un programme en service.
Définition
Service est traduit en anglais par daemon.
Qu'est-ce qu'un daemon ?
[Unix] Originellement DAEMON, Brit. pour « Disk and Execution MONitor ». Programme réalisant des tâches de fond du système, sous Unix. Appelé aussi driver sur d'autres système. En temps normal, son fonctionnement ne doit pas être remarqué par l'utilisateur. Un démon peut aussi être un sous-programme appelé par un programme principal (dans ce cas on parle « sérieusement » de bibliothèque partagée)
Pourquoi ce tutoriel?
Il est parfois nécessaire de transformer un programme en daemon, surtout lors de mise en place de serveur. Par exemple, les serveurs de jeux, ou des programmes de téléchargement automatique tel que SABnzbd. Le problème est que les scripts pour « daemonizer » que l'on trouve sur internet, sont mal conçûs, voir dangereux pour le système en cas de mauvaise utilisation.
Mise en place
Il faut d'abord créer un script sh que nous appellerons dans notre exemple SABnzbd.py. Le nom ici donnée est tous a fait arbitraire. Généralement, par facilité, on préférera lui donner le même nom que le programme que l'on va démonizer.
Pour cela, on lance son éditeur favori, soit nano ou vim en ligne de commande, soit gedit,kate ou mousepad.
Script
On utilise proprement start-stop-daemon qui permet de deamonizé n'importe quel programme.
Exemple pour SABnzbd :
#! /bin/sh -e DAEMON="/opt/SABnzbd-0.4.11/SABnzbd.py" #ligne de commande du programme DEAMON_OPT="-d -p -f /home/jfb/SABnzbd/sabnzbd.ini" #argument à utiliser par le programme DAEMONUSER="user" #utilisateur du programme DEAMON_NAME="SABnzbd.py" #Nom du programme (doit être identique à l'exécutable) PATH="/sbin:/bin:/usr/sbin:/usr/bin" #Ne pas toucher test -x $DAEMON || exit 0 . /lib/lsb/init-functions d_start () { log_daemon_msg "Starting system $DEAMON_NAME Daemon" start-stop-daemon --background --name $DEAMON_NAME --start --quiet --user $DAEMONUSER --exec $DAEMON -- $DEAMON_OPT log_end_msg $? } d_stop () { log_daemon_msg "Stopping system $DEAMON_NAME Daemon" start-stop-daemon --name $DEAMON_NAME --stop --retry 5 --quiet --name $DEAMON_NAME log_end_msg $? } case "$1" in start|stop) d_${1} ;; restart|reload|force-reload) d_stop d_start ;; force-stop) d_stop killall -q $DEAMON_NAME || true sleep 2 killall -q -9 $DEAMON_NAME || true ;; status) status_of_proc "$DEAMON_NAME" "$DAEMON" "system-wide $DEAMON_NAME" && exit 0 || exit $? ;; *) echo "Usage: /etc/init.d/$DEAMON_NAME {start|stop|force-stop|restart|reload|force-reload|status}" exit 1 ;; esac exit 0
Maintenant on sauvegarde le fichier dans son répertoire home "/home/user/sabnzbd".
Maintenant on va le déplacer dans /etc/init.d et lui donner les bons droits d'exécution.
sudo cp /user/home/sabnzbd /etc/init.d/. sudo chmod 0755 /etc/init.d/sabnzbd
On teste notre script :
sudo /etc/init.d/sabnzbd start * Starting system SABnzbd Daemon sudo /etc/init.d/sabnzbd stop * Stopping system SABnzbd Daemon
Maintenant on ajoute le service au démarrage de l'ordinateur :
sudo update-rc.d sabnzbd defaults Adding system startup for /etc/init.d/sabnzbd ... /etc/rc0.d/K20sabnzbd -> ../init.d/sabnzbd /etc/rc1.d/K20sabnzbd -> ../init.d/sabnzbd /etc/rc6.d/K20sabnzbd -> ../init.d/sabnzbd /etc/rc2.d/S20sabnzbd -> ../init.d/sabnzbd /etc/rc3.d/S20sabnzbd -> ../init.d/sabnzbd /etc/rc4.d/S20sabnzbd -> ../init.d/sabnzbd /etc/rc5.d/S20sabnzbd -> ../init.d/sabnzbd
Pour le retirer :
sudo update-rc.d -f sabnzbd remove Removing any system startup links for /etc/init.d/sabnzbd ... /etc/rc0.d/K20sabnzbd /etc/rc1.d/K20sabnzbd /etc/rc2.d/S20sabnzbd /etc/rc3.d/S20sabnzbd /etc/rc4.d/S20sabnzbd /etc/rc5.d/S20sabnzbd /etc/rc6.d/K20sabnzbd
Voila, votre programme fonctionne en tant que deamon et sera lancé automatique au démarrage de l'ordinateur.
Documentation supplémentaire et liens
http://www.delafond.org/traducmanfr/deb/man8/start-stop-daemon.8.html de Ian Jackson
http://manpages.ubuntu.com/manpages/gutsy/fr/man8/update-rc.d.8.html
http://www.linux-france.org/prj/jargonf/D/deacmon.html
Contributeurs : Rédigée et maintenue par RedLemon