Différences
Ci-dessous, les différences entre deux révisions de la page.
Prochaine révision | Révision précédente | ||
deamon [Le 26/09/2009, 16:22] RedLemon créée |
— (Version actuelle) | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | {{tag>breezy dapper edgy jaunty serveur daemon}} | ||
- | ====== Comment transformer un programme en daemon. ====== | ||
- | |||
- | ===== Définition ===== | ||
- | |||
- | Qu'est 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 DLL) | ||
- | |||
- | ===== 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 programme de téléchargement automatique tel que SABnzbd. Le problème est que les script pour « daemonizer » quel l'on trouve sur internet, son mal conçût, voir dangereux pour le système en cas de mauvaise utilisation. | ||
- | |||
- | ===== Mise en place ===== | ||
- | |||
- | Il faut d'abord crée 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]] en ligne de commande, soit [[gedit]] ou [[kedit]]. | ||
- | |||
- | ==== Script ==== | ||
- | |||
- | On utilise proprement start-stop-daemon qui permet de deamonizé n'importe quel programme. | ||
- | |||
- | Exemple pour SABnzbd : | ||
- | |||
- | <note important>Configurer correctement l'entête du script en fonction de votre utilisation!</note> | ||
- | |||
- | <file> | ||
- | #! /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" #arguement à utilisé par le programme | ||
- | DAEMONUSER="user" #utilisateur du programme | ||
- | DEAMON_NAME= « SABnzbd.py » #Nom du programme (doit etre 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 | ||
- | </file> | ||
- | |||
- | Maintenant on sauvegarde le fichier dans sont repértoire home "/home/user/SABnzbd.py". | ||
- | |||
- | Maintenant on va le déplacer dans /etc/init.d et lui donner les bon droits d'execution. | ||
- | |||
- | <file> | ||
- | sudo cp /user/home/SABnzbd.py /etc/init.d/. | ||
- | sudo chmod 0755 /user/home/SABnzbd.py | ||
- | </file> | ||
- | |||
- | On teste notre script : | ||
- | |||
- | <file> | ||
- | sudo /etc/init.d/sabnzbd start | ||
- | * Starting system SABnzbd Daemon | ||
- | |||
- | sudo /etc/init.d/sabnzbd stop | ||
- | * Stopping system SABnzbd Daemon | ||
- | </file> | ||
- | |||
- | Maintenant on ajoute le service au démarrage de l'ordinateur : | ||
- | |||
- | <file> | ||
- | 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 | ||
- | |||
- | </file> | ||
- | |||
- | Pour le retirer : | ||
- | |||
- | <file> | ||
- | 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 | ||
- | </file> | ||
- | |||
- | Voila, votre programme fonctionne en temp 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 [[utilisateurs/RedLemon]]// |