Ich schreibe ein Shell-Skript , das ich beim Start als Daemon ausführen möchte, ohne externe Tools wie daemontools oder daemonize zu verwenden .
Linux Daemon Writing HOWTO
Laut Linux Daemon Writing HOWTO hat ein richtiger Daemon die folgenden Eigenschaften:
- Gabeln aus dem übergeordneten Prozess
- schließt alle Datei - Deskriptoren (dh
stdin
,stdout
,stderr
) - Öffnet Protokolle zum Schreiben (falls konfiguriert)
- ändert das Arbeitsverzeichnis in ein dauerhaftes (normalerweise
/
) - setzt den Dateimodus Maske (umask)
- Erstellt eine eindeutige Sitzungs-ID (SID)
Einführung dämonisieren
Die Einführung zu Daemonize geht noch weiter und besagt, dass ein typischer Daemon auch:
- Trennt sich von seinem Steuerterminal (falls vorhanden) und ignoriert alle Terminal-Signale
- trennt sich von seiner Prozessgruppe
- Griffe
SIGCLD
Wie würde ich in einem all dies tun sh
, dash
oder bash
Skript mit gängigen Linux - Tool nur?
Das Skript sollte in der Lage sein, auf so vielen Distributionen wie möglich ohne zusätzliche Software zu laufen, obwohl Debian unser Hauptaugenmerk ist.
ANMERKUNG: Ich weiß, dass es im StackExchange- Netzwerk viele Antworten gibt, die die Verwendung von nohup
oder empfehlen setsid
, aber keine dieser Methoden erfüllt alle oben genannten Anforderungen.
EDIT: Die Manpage daemon (7) gibt auch einige Hinweise, obwohl es einige Unterschiede zwischen älteren SysV
und neueren Daemons zu geben scheint systemd
. Da die Kompatibilität mit einer Vielzahl von Distributionen wichtig ist, stellen Sie bitte sicher, dass die Antwort alle Unterschiede deutlich macht.
daemon
und jene anderen Dinge dienen zum Ausführen von beliebigen Shell-Skripten, ohne dass das Ausführen als vorgesehen ist ein Daemon. Da Sie der Autor sind und die vollständige Kontrolle darüber haben, wie das Skript geschrieben wird, müssen Sie es so einrichten, dass es nur über ein systemd unitfile- oder rc.d-Skript gestartet werden kann. Du hast "Proper" angegeben!