Estoy escribiendo un script de shell que me gustaría ejecutar como demonio en el inicio sin usar herramientas externas como daemontools o daemonize .
COMO de Linux Daemon Writing
De acuerdo con el Linux Daemon Writing HOWTO , un demonio adecuado tiene las siguientes características:
- horquillas del proceso padre
- cierra todos los descriptores de archivos (es decir,
stdin
,stdout
,stderr
) - abre registros para escribir (si está configurado)
- cambia el directorio de trabajo a uno que sea persistente (generalmente
/
) - restablece la máscara de modo de archivo (umask)
- crea una ID de sesión (SID) única
daemonize Introducción
La Introducción daemonize va más allá, afirmando que un demonio típico también:
- se disocia de su terminal de control (si hay uno) e ignora todas las señales de terminal
- se disocia de su grupo de procesos
- manejas
SIGCLD
¿Cómo voy a hacer todo esto en una sh
, dash
o bash
la escritura con sólo herramientas comunes de Linux?
El script debería poder ejecutarse en tantas distribuciones como sea posible sin software adicional, aunque Debian es nuestro enfoque principal.
NOTA: Sé que hay muchas respuestas en la red de StackExchange que recomiendan el uso de nohup
o setsid
, pero ninguno de estos métodos aborda todos los requisitos anteriores.
EDITAR: La página de manual de daemon (7) también ofrece algunos consejos, aunque parece haber algunas diferencias entre los SysV
demonios de estilo antiguo y los systemd
más nuevos . Dado que la compatibilidad con una variedad de distribuciones es importante, asegúrese de que la respuesta aclare cualquier diferencia.
daemon
y esas otras cosas son para ejecutar scripts de shell arbitrarios sin ninguna disposición para ejecutarse como Un demonio. Como usted es el autor y tiene el control total de cómo se escribe ese script, hágalo para que pueda iniciarse desde un archivo systemd unitf o script rc.d. Usted hizo especifica "correcto"!