Existe-t-il un moyen «standard» de créer un démon dans Debian?

17

J'ai besoin de créer un démon à partir de l'application dans Debian. Existe-t-il un outil standard pour cela dans Debian comme "upstart" dans Ubuntu? Je n'ai besoin que de commandes start-stop, pour démarrer un programme en tant que démon avec quelques options et un fichier pid et le tuer avec le fichier pid.

J'ai regardé init.d mais il semble que ce soit pour le lancement au démarrage. Je veux démarrer mon démon manuellement.

Kuroki Kaze
la source
2
Notez que cela a changé pour Debian Jessie, qui a changé la valeur par défaut de sysvinit à systemd.
Jules
Debian Jessie semble avoir une certaine forme de compatibilité descendante, au moins en utilisant / usr / bin / service - s'il n'y a pas de configuration parvenu (/etc/init/{service}.conf) et qu'il y a une configuration sysvinit (/ etc / init. d / {service}), puis / usr / bin / service interagira avec /etc/init.d/{service} comme auparavant sous sysvinit.
Kevin

Réponses:

18

Vous pouvez créer votre démon manuellement en suivant le /etc/init.d/skeletonfichier sur Debian.

Vous pouvez utiliser /usr/bin/servicepour lancer $ sudo service yourdaemon startet arrêter $ sudo service yourdaemon stopvotre démon.

Tant que vous ne liez votre script à aucun des /etc/rc?.drépertoires, il ne démarre pas au démarrage.

D'un autre côté, vous voudrez peut-être regarder daemontools , qui n'est pas standard sur debian mais qui a des fonctionnalités intéressantes.

chmeee
la source
Merci. Il semble que je n'en ai pas /usr/bin/servicesur mon système (c'est Debian Lenny), mais je peux démarrer des scripts directement avec /etc/init.d/myservice start.
Kuroki Kaze
3
Vous pouvez utiliser sudo invoke-rc.d yourservice startaussi bien
chmeee
ne savais pas ça. Thx
chiggsy
3

Debian (et Ubuntu) ont le programme d'aide start-stop-daemonqui est utilisé dans les scripts d'initialisation. Il a plusieurs options pour démarrer et suivre les démons. Vous pouvez simplement écrire un wrapper autour de lui, par exemple

case $1 in
start) start-stop-daemon --start --exec /my/exec/prog --pidfile /my/pid/file --background
       ;;
stop)  start-stop-daemon --stop --pidfile /my/pid/file 
       ;;
esac
Dan Andreatta
la source
3
Je préférerais /etc/init.d/skeleton suggéré ci-dessus, car il comprend également des parties INIT INFO qui aident à la migration vers le démarrage par dépendance
dpavlin
2

Pour démoniser correctement un processus pour Debian, vous devrez prendre plusieurs mesures, y compris quitter le processus de contrôle, réinitialiser les E / S et créer un fichier d'ID de processus pour jouer correctement. Vous pouvez à la place utiliser quelque chose comme le programme démon du package du même nom pour le faire pour vous. Si c'est ce que vous vouliez faire, la réponse peut être trouvée ici sur StackOverflow: /programming/3095566/linux-daemonize

La commande upstart s'apparente davantage à la commande invoke-rc.d de Debian ou à la commande de service du paquet sysvinit-utils. Ils s'attendent à travailler à partir des scripts d'initialisation dans /etc/init.d. Il est standard sur Debian d'en créer un pour votre paquet et de le faire utiliser le programme start-stop-daemon comme vous pouvez le voir dans l'exemple /etc/init.d/skeleton.

Ce n'est pas parce que vous créez un script /etc/init.d/myservice qu'il doit démarrer automatiquement. Vous pouvez ajuster les niveaux d'exécution auxquels il s'arrête et démarre automatiquement à l'aide d'un outil comme update-rc.d. Ceci est décrit plus en détail dans Désactiver un service à partir de tous les niveaux d'exécution?

jla
la source