Sto scrivendo uno script di shell che vorrei eseguire come demone all'avvio senza utilizzare strumenti esterni come daemontools o daemonize .
Demone Linux che scrive HOWTO
Secondo il Linux Daemon Writing HOWTO , un demone corretto ha le seguenti caratteristiche:
- forcelle dal processo genitore
- chiude tutti i descrittori di file (cioè
stdin
,stdout
,stderr
) - apre i registri per la scrittura (se configurato)
- cambia la directory di lavoro in una persistente (di solito
/
) - ripristina la maschera della modalità file (umask)
- crea un ID sessione univoco (SID)
daemonize Introduzione
L' introduzione daemonize va oltre, affermando che un demone tipico anche:
- si dissocia dal suo terminale di controllo (se presente) e ignora tutti i segnali del terminale
- si dissocia dal suo gruppo di processo
- maniglie
SIGCLD
Come faccio a fare tutto questo in una sh
, dash
o bash
script con soli strumenti comuni di Linux?
Lo script dovrebbe essere in grado di funzionare su quante più distribuzioni possibile senza software aggiuntivo, sebbene Debian sia il nostro obiettivo principale.
NOTA: so che ci sono molte risposte sulla rete StackExchange che consiglia l'uso di nohup
o setsid
, ma nessuno di questi metodi risponde a tutti i requisiti di cui sopra.
EDIT: La manpage daemon (7) fornisce anche alcuni suggerimenti, anche se sembrano esserci alcune differenze tra i SysV
demoni di vecchio stile e systemd
quelli più recenti. Poiché la compatibilità con una varietà di distro è importante, assicurarsi che la risposta chiarisca eventuali differenze.
daemon
e quelle altre cose sono per eseguire script di shell arbitrari senza alcuna disposizione un demone. Dato che sei l'autore, in pieno controllo di come viene scritto quello script, fallo in modo che possa essere avviato solo da un file systemd o da uno script rc.d. Si hai specificato "corretta"!