Piszę skrypt powłoki , który chciałbym uruchamiać jako demon podczas uruchamiania bez użycia zewnętrznych narzędzi, takich jak daemontools lub demonizuj .
Linux Daemon Writing HOWTO
Według HOWTO Daemon pisania , o właściwej demon ma następujące cechy:
- widelce z procesu nadrzędnego
- zamyka wszystkie deskryptory plików (czyli
stdin
,stdout
,stderr
) - otwiera dzienniki do zapisu (jeśli skonfigurowano)
- zmienia katalog roboczy na trwały (zwykle
/
) - resetuje maskę trybu pliku (umask)
- tworzy unikalny identyfikator sesji (SID)
demonizuj Wprowadzenie
Daemonize Wprowadzenie idzie dalej, stwierdzając, że to typowy demon również:
- odłącza się od terminala sterującego (jeśli taki istnieje) i ignoruje wszystkie sygnały terminala
- odłącza się od swojej grupy procesów
- uchwyty
SIGCLD
Jak bym to wszystko zrobić w sposób sh
, dash
lub bash
skrypt tylko wspólnych narzędzi Linux?
Skrypt powinien być w stanie działać na możliwie największej liczbie dystrybucji bez dodatkowego oprogramowania, chociaż naszym głównym celem jest Debian .
UWAGA: Wiem, że w sieci StackExchange jest wiele odpowiedzi zalecających użycie nohup
lub setsid
, ale żadna z tych metod nie spełnia wszystkich powyższych wymagań.
EDYCJA: Strona podręcznika demona (7) również daje pewne wskazówki, chociaż wydaje się, że istnieją pewne różnice między SysV
demonami w starszym stylu i nowszymi systemd
. Ponieważ ważna jest zgodność z różnymi dystrybucjami, upewnij się, że odpowiedź wyjaśnia wszelkie różnice.
daemon
te i inne służą do uruchamiania dowolnych skryptów powłoki bez możliwości działania jako demon. Ponieważ jesteś autorem i masz pełną kontrolę nad sposobem pisania tego skryptu, spraw, aby można go było uruchomić ze skryptu systemfile lub skryptu rc.d. Państwo było określić „Właściwa”!