Eigentlich bin ich mir nicht so sicher, ob ich Shellskripte verwenden soll oder ob es schon einige Möglichkeiten gibt. Aber wie auch immer wir vorgehen, ich möchte, dass ein Dienst die ganze Zeit läuft.
Sagen wir iptables
als Beispiel. Dann ..
- Wann immer der
iptables
Dienst ausgeführt wirdstopped
oder (mit anderen Worten) nicht ausgeführt wird, möchte ich, dass erstarted
(oderrestarted
) automatisch ausgeführt wird, wenn er angehalten wird (oder nicht ausgeführt wird). - Mit anderen Worten, ich möchte, dass ein Dienst die ganze Zeit läuft.
(Möglicherweise kann ich eine angemessene Häufigkeit für die Überprüfung angeben, wenn die Echtzeitprüfung das Problem ist. Nehmen wir also an, alle 5 Minuten.)
Die einzige Möglichkeit, die ich mir vorstellen kann, ist die Verwendung von Shell-Skripten mit Cron Tab.
- Gibt es bitte eine clevere Lösung?
Vielen Dank!
alerts
Ihnen zu etwas nicht passt.restarted
immer dann verfügbar sein muss, wenn er aus irgendeinem Grund gestoppt wurde. Kein Problem beim Neustart.Antworten:
Update März 2018
Diese Antwort ist mittlerweile ziemlich alt, und seit es geschrieben wurde, hat systemd den PID1-Krieg gegen Linux gewonnen. Daher sollten Sie wahrscheinlich eine systemd- Unit erstellen , wenn systemd in Ihre Distribution integriert ist (was die meisten davon sind).
Die Antwort unten wird für die Nachwelt aufbewahrt.
Die obige Antwort ist gültig, aber ich dachte, ich würde einige Alternativen erwähnen:
Beachten Sie, dass Ihr Betriebssystem das Prozessmanagement-Problem bereits gelöst hat. Traditionell hat Linux sysvinit verwendet. Dies ist im Grunde die Sammlung von Skripten, die Sie in init.d sehen. Es ist jedoch ziemlich dumm und kann keine Prozesse überwachen, init.d-Skripte sind kompliziert und werden aus gutem Grund ersetzt.
Modernere Betriebssysteme beginnen, sysvinit zu ersetzen, und die Spitzenreiter sind Upstart und Systemd. Debian neigt zu systemd, Ubuntu hat sich entwickelt und ist bereits zu Upstart übergegangen, und wie Debian Redhat / CentOS / Fedora bewegen sich auch Debian Redhat / CentOS / Fedora zu systemd. Wenn Sie also ein Betriebssystem verwenden, das sysvinit bereits ersetzt hat, würde ich die Verwendung der integrierten Funktionen empfehlen. Die Skripte sind viel einfacher zu schreiben als Init-Skripte.
Ich habe runit benutzt und mag es, aber am einfachsten ist es, supervisor zu benutzen. Es ist auch sehr gut dokumentiert, funktioniert fast überall und ist in allen wichtigen Distributionen enthalten.
Aber was auch immer Sie tun, bitte, bitte, verwenden Sie kein Shell-Skript. Es gibt so viele Dinge, die an diesem Ansatz falsch sind!
quelle
iptables
ist ein schlechtes Beispiel, da es nicht wirklich ein Dienst oder ein Dämon ist, der ausgeführt wird, sondern ein Teil des Kernels. Sie können nicht wirklich "anhalten"iptables
, Sie können ihm nur eine Konfiguration geben, und "anhalten" bedeutet, dass Sie ihm eine leere Konfiguration geben. Ich hatte zwar einen Absturz von Linux-Systemen, aber das Setup für die Portweiterleitung mitiptables
funktioniert weiterhin.Wie auch immer, ein Dienstprogramm namens
monit
wird tun, was Sie wollen. Wenn Sie Debian verwenden, ist es eineapt-get install monit
Abwesenheit. Es ist ein bisschen umständlich zu lernen, aber sehr flexibel.quelle
Wir verwenden dieses einfache Skript, um eine Warnung zu erstellen und den Dienst zu starten, wenn er nicht ausgeführt wird. Sie können auch weitere Dienste hinzufügen.
quelle
Alternative Lösung für Desktop (KDE):
Wir können einen Dienst mit dem Status des Applet- / Widget- Servers überwachen. Fügen Sie nach der Installation einfach einen Befehl zum Widget hinzu, um Ihren Dienst zu überwachen
Beispiel
systemctl status httpd.service
KDE 4 Version: https://store.kde.org/content/show.php?content=101336
KDE 5 Version: https://store.kde.org/p/1190292/
quelle
Ich weiß, dass es einige Jahre her ist, seit die Frage gestellt wurde. aber mit dem systemd (meistens mit centos und REHL verfügbar) können Sie diesen bash-Befehl mit cron ausführen, um zu überprüfen und neu zu starten, ob der Dienst nicht verfügbar ist.
Speichern Sie es in Ihrem Bin-Verzeichnis und nennen Sie es wie Monitor. Erteilen Sie ihm die entsprechende Dateiberechtigung. dann starte es wie
Wenn Sie den Redis-Dienst überprüfen möchten, starten Sie ihn bei Bedarf neu.
Zuletzt fügen Sie dies zu Ihrem Cron-Job hinzu.
hoffe, das wird helfen
quelle
Um die lange Liste der init / svc-Überwachung zu erweitern, befindet sich als Unterverzeichnis zu S6 ein neues Kind im Block, 66, das die Verwaltung und Protokollierung von s6-Diensten schnell, einfach und benutzerfreundlich erledigt. Dies ist der Link zur offiziellen Dokumentation für Obarun-Linux https://web.obarun.org/software
Dies ist eine FAQ zur Verwendung dieser 66-Software und zum Verständnis von s6 http://sysdfree.wordpress.com/266
Seit seiner stabilen Veröffentlichung wurde nur ein Fehler in Bezug auf Kernel-Änderungen von 4.20 -> 5.0 gefunden. Alle anderen gemeldeten Probleme hatten damit zu tun, dass Leute etwas Neues lernten. Wenn das Service-Management einfacher werden soll, ist es möglicherweise besser, auf ms-windows umzusteigen (Linus verbietet). Um im wirklichen Leben zu sehen, wie das funktionieren kann, muss man nur ein Obarun live.iso herunterladen und damit spielen. Installieren Sie Dienste und deren 66-Skripte, um sie zu aktivieren, zu beenden, ihre Protokolle anzuzeigen, zu stoppen und zu starten (sofern aktiviert), um Dienste in einem Baum zu bündeln und um Dienstbäume zu starten und zu stoppen, um Dienste auf Benutzerebene separat zu haben vom System. Es macht das, was s6 gut kann, und erleichtert dem Benutzer die Nutzung des kugelsicheren Systems unter s6.
Bild-Downloads finden Sie hier: https://web.obarun.org/index.php?id=74 md5 check files https://repo.obarun.org/iso/
Abgesehen von init und Service Management hat s6 / 66 keinerlei Abhängigkeiten von irgendetwas anderem im System. Es ist eine Schicht des Basissystems, die es dem Rest der Software überlässt, selbstständig zu arbeiten, init / svc-mgmt blind. Alle s6 und 66 sind in C geschrieben und nicht linux- oder glibc-spezifisch. Die Server von Skarnet (s6-Autoren) laufen seit fast einem Jahrzehnt ohne viele Pausen auf einem benutzerdefinierten System. Alpine, Void und Adelie haben derzeit auch s6-Software in ihren Repositories, Adelie verwendet sie standardmäßig für die Serviceüberwachung. Leere trägt jetzt auch 66. Ich weiß nicht, ob und inwieweit jemand s6 auf xxBSD oder andere xxIX-Systeme portiert hat.
quelle