Ich suche nach einer Standardmethode oder bewährten Methode, um einen Daemon, der von einem init.d
Shell-Skript gestartet wird, am Leben zu erhalten.
Oder noch besser, gibt es eine Möglichkeit, es direkt am Leben zu erhalten /etc/init.d
?
Insbesondere habe ich einen Daemon namens dtnd with und eine Endlosschleife, die nach einem unerwartet beendeten Prozess sucht. Falls vorhanden, aktiviert der Daemon sie erneut. Außerdem verwende ich das Start-Stopp-Dämon-Tool, um die Prüfung von einem bestimmten Systembenutzer ausführen zu lassen.
Ich möchte diesen dtnd-Daemon vom Start aus ausführen. Um dieses Verhalten zu erreichen, habe ich ein init.d-Skript erstellt, das die dtnd-Datei mit den Befehlen start, stop und status "umschließt".
Ich habe 2 Fragen, die ich gerne lösen möchte:
Gibt es eine Möglichkeit, einen Prozess aus dem init.d- Shell-Skript am Leben zu erhalten? Ist eine Standard- / Best-Way-Praxis?
Es wird empfohlen, einen Prozess mit Endlosschleife am Leben zu halten? Ich denke, es ist besser, einen Befehl
respawn
zu verwenden, um das zu erreichen. Es ist richtig?
Ich weiß von der Existenz des respawn
Befehls. Ich denke, das ist was ich brauche, aber ich verstehe den Workflow zwischen /etc/init.d/
und nicht /etc/init
. Kann mir jemand helfen?
Beachten Sie, dass ich inittab nicht weder Emporkömmling (ich nur für einen Benutzer ist /etc/init
, /etc/init.d
, cron
und System - Tools wie start-stop-daemon
. Ich meine, nur die Standard - Tools)
Vielen Dank für Ihre Zeit!
Antworten:
Debian wird irgendwann systemd haben, also ist dies der Weg, dies auf einem Linux-System zu tun, das systemd verwendet (und viele tun es bereits; Sie könnten erwägen, die Distributionen zu wechseln).
Systemd kann den Dienst automatisch für Sie am Leben erhalten. Es sind keine weiteren Werkzeuge erforderlich. Stellen Sie einfach sicher, dass
Restart=always
im[Service]
Abschnitt der Servicedatei festgelegt ist .Für komplexere Szenarien stehen auch mehrere andere Optionen zur Verfügung.
quelle
systemd
init.d
Skript verwerfen & Basis auf*.service
systemctl edit myservice
, dannsystemctl daemon-reload
und Neustart myservice.Sie könnten es hinzufügen
/etc/inittab
mitrespawn
:Es ist ein schmutziger Hack, aber ich habe ihn in der Vergangenheit erfolgreich auf älteren sysv-init-Systemen eingesetzt.
quelle
Nun, das ist einer der Hauptgründe, warum Debian zu systemd wechselt.
sysvinit (/etc/init.d) kann nicht erkennen, ob ein Dienst nicht verfügbar ist oder nicht reagiert. Dies bedeutet, dass Sie diese Dienste überwachen und eskalieren müssen, wenn ein Dienst seine Aufgabe nicht mehr erfüllt.
wahrscheinlich ist es am einfachsten, auf einen anderen Daemonhandler zu migrieren, wie systemd (Standard in RHEL7, wird Standard in next debian und ubuntu lts sein), upstart (Standard in RHEL6, Ubuntu 12.04 und 14.04), daemontools (wie erwähnt, entwickelt von djb) oder was anderes.
Die Aufgabe, einen Dienst am Leben zu erhalten, übernimmt PITA in sysvinit.
quelle
Am besten stellen Sie sicher, dass Ihre Daemons überhaupt nicht anhalten.
Andernfalls möchten Sie vielleicht einen Blick auf die daemontools von DJB werfen
quelle
Der Standardansatz für mich ist die Verwendung des Monit-Dienstprogramms .
Ich kann Ihrer Beschreibung nicht ganz entnehmen, ob Sie etwas wie Monit geschrieben haben und versuchen, sicherzustellen, dass es ausgeführt wird, oder ob Sie etwas benötigen, um den von Ihnen erstellten Daemon zu beobachten.
quelle