¿Hay una forma "estándar" de hacer demonios en Debian?

17

Necesito crear un demonio desde la aplicación en Debian. ¿Hay alguna herramienta estándar para esto en Debian como "advenedizo" en Ubuntu? Solo necesito los comandos start-stop, para iniciar un programa como demonio con algunas opciones y un archivo pid y matarlo con el archivo pid.

Miré init.d pero parece que estos son para el inicio del tiempo de arranque. Quiero iniciar mi demonio manualmente.

Kuroki Kaze
fuente
2
Tenga en cuenta que esto ha cambiado para debian jessie, que ha cambiado el valor predeterminado de sysvinit a systemd.
Jules
debian jessie parece tener algún tipo de compatibilidad con versiones anteriores, al menos usando / usr / bin / service, si no hay una configuración inicial (/etc/init/{service}.conf) y hay una configuración sysvinit (/ etc / init. d / {service}), luego / usr / bin / service interactuará con /etc/init.d/{service} como antes en sysvinit.
Kevin

Respuestas:

18

Puede crear su demonio manualmente siguiendo el /etc/init.d/skeletonarchivo en Debian.

Puedes usar /usr/bin/servicepara lanzar $ sudo service yourdaemon starty detener $ sudo service yourdaemon stoptu demonio.

Mientras no vincule su script a ninguno de los /etc/rc?.ddirectorios, no comenzará en el inicio.

Por otro lado, es posible que desee ver Daemontools , que no es estándar en Debian pero tiene algunas características interesantes.

chmeee
fuente
Gracias. Parece que no tengo /usr/bin/serviceen mi sistema (es Debian Lenny), pero puedo iniciar scripts directamente con /etc/init.d/myservice start.
Kuroki Kaze
3
Puedes usar sudo invoke-rc.d yourservice starttambién
chmeee
No sabía eso. Thx
chiggsy
3

Debian (y Ubuntu) tienen el programa auxiliar start-stop-daemonque se usa en los scripts de inicio. Tiene bastantes opciones para iniciar y rastrear demonios. Simplemente puede escribir un envoltorio a su alrededor, por ejemplo

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
fuente
3
Preferiría /etc/init.d/skeleton sugerido anteriormente, porque también incluye partes INIT INFO que ayudan con la migración al arranque de dependencia
dpavlin
2

Para demonizar adecuadamente un proceso para Debian, necesitará tomar varios pasos, entre los que se encuentra el proceso de control, restablecer IO y crear un archivo de identificación de proceso para que funcione bien. En su lugar, puede usar algo como el programa daemon del paquete del mismo nombre para hacerlo por usted. Si eso es lo que quería hacer, la respuesta se puede encontrar aquí en StackOverflow: /programming/3095566/linux-daemonize

El comando upstart es más parecido al comando invoke-rc.d de Debian o al comando de servicio del paquete sysvinit-utils. Esperan trabajar con scripts de inicio en /etc/init.d. Es estándar en Debian crear uno de esos para su paquete y hacer que use el programa start-stop-daemon como puede ver en el ejemplo /etc/init.d/skeleton.

El hecho de que cree un script /etc/init.d/myservice no significa que deba iniciarse automáticamente. Puede ajustar los niveles de ejecución en los que se detiene y comienza automáticamente usando una herramienta como update-rc.d. Esto se describe con más detalle en ¿ Deshabilitar el inicio de un servicio en todos los niveles de ejecución?

jla
fuente