So überwachen Sie einen Dienst und starten ihn neu, wenn er unter Linux gestoppt wird

So überwachen Sie einen Dienst und starten ihn neu, wenn er unter Linux gestoppt wird

Eigentlich bin ich mir nicht so sicher, ob ich Shell-Skripte verwenden sollte oder ob es bereits andere Möglichkeiten gibt. Aber welchen Ansatz wir auch verwenden, ich möchte einen Dienst ständig am Laufen halten.

Nehmen wir apache2als Beispiel: Dann …

  • Wann immerder apache2Dienst ist gestoppt oder wird nicht ausgeführt. Ich möchte, dass er gestartet (oder neu gestartet) wird … automatisch.
  • In einfacheren Worten, ich möchte einServiceimmer einsatzbereit.

(Vielleicht könnte ich eine angemessene Häufigkeit angeben, um zu überprüfen, obDurchführung einer Echtzeitprüfungist das Problem. Also sagen wir, alle 5 Minuten)

Die einzige Möglichkeit, die mir einfällt, ist die Verwendung von Shell-Skripten mit Cron-Tab.

  • Gibt es bitte eine intelligente Lösung?

Danke!

Antwort1

Update März 2018

Diese Antwort ist mittlerweile ziemlich alt, und seit sie geschrieben wurde, hat systemd den pid1-Krieg unter Linux gewonnen. Daher sollten Sie wahrscheinlich einsystemdEinheit, wenn systemd in Ihre Distribution integriert ist (was auf die meisten zutrifft).

Die folgende Antwort bleibt für die Nachwelt erhalten.


Die obige Monit-Antwort ist gültig, aber ich dachte, ich würde einige Alternativen erwähnen:

Man sollte bedenken, dass Ihr Betriebssystem das Problem der Prozessverwaltung bereits gelöst hat. Traditionell verwendet Linux sysvinit, also im Grunde die Sammlung von Skripten, die Sie in init.d sehen. Allerdings ist es 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 tendiert zu Systemd, Ubuntu hat Upstart entwickelt und ist bereits weitgehend darauf umgestiegen, und wie Debian bewegen sich auch Redhat/CentOS/Fedora in Richtung Systemd. Wenn Sie also ein Betriebssystem verwenden, das Sysvinit bereits ersetzt hat, würde ich empfehlen, das Integrierte zu verwenden. Die Skripte sind viel einfacher zu schreiben als Init-Skripte.

Ich habe runit verwendet und bin damit sehr zufrieden, aber am einfachsten zu verwenden ist supervisor. Es ist außerdem sehr gut dokumentiert, funktioniert fast überall und ist in allen wichtigen Distributionen enthalten.

Aber was auch immer Sie tun, bitte, bitte, BITTE verwenden Sie kein Shell-Skript. An diesem Ansatz ist so vieles falsch!

Antwort2

iptablesist ein schlechtes Beispiel, da es sich nicht wirklich um einen Dienst oder Daemon handelt, der ausgeführt wird, sondern um einen Teil des Kernels. Sie können es nicht wirklich „stoppen“ iptables, Sie können es nur konfigurieren und „stoppen“ bedeutet, ihm eine leere Konfiguration zu geben. Tatsächlich sind bei mir Linux-Systeme abgestürzt, aber die Portweiterleitung funktioniert iptablesweiterhin.

Wie dem auch sei, ein Dienstprogramm namensmonitwird tun, was Sie wollen. Wenn Sie Debian verwenden, ist es ein apt-get install monitAusweg. Es ist ein bisschen kompliziert, sich damit vertraut zu machen, aber es ist sehr flexibel.

Antwort3

Wir verwenden dieses einfache Skript, um eine Warnung auszulösen und den Dienst zu starten, wenn er nicht ausgeführt wird. Sie können auch weitere Dienste hinzufügen.

 file name: uptime.sh

 #!/bin/bash
 #service monitoring
 /bin/netstat -tulpn | awk '{print $4}' | awk -F: '{print $4}' | grep ^80$ > /dev/null   2>/dev/null
 a=$(echo $?)
 if test $a -ne 0
 then
 echo "http service down" | mail -s "HTTP Service DOWN and restarted now" root@localhost
 /etc/init.d/httpd start > /dev/null 2>/dev/null
 else
 sleep 0
 fi
 /bin/netstat -tulpn | awk '{print $4}' | awk -F: '{print $4}' | grep ^53$ > /dev/null   2>/dev/null
 b=$(echo $?)
 if test $b -ne 0
 then
 echo "named service down" | mail -s "DNS Service DOWN and restarted now" root@localhost
 /etc/init.d/named start > /dev/null 2>/dev/null
 else
 sleep 0
 fi

 Cron setup:
 */5 * * * * /root/uptime.sh > /dev/null 2>/dev/null

Antwort4

Als Ergänzung zur langen Liste der Init/SVC-Überwachung gibt es als Unterverzeichnis von S6 einen neuen Namen, 66, der die S6-Dienstverwaltung und -Protokollierung schnell, einfach und benutzerfreundlich handhabt. Dies ist der Link zur offiziellen Dokumentation für Obarun-Linuxhttps://web.obarun.org/software

Dies ist eine FAQ zur Verwendung dieser 66-Software und zum Verständnis von s6http://sysdfree.wordpress.com/266

Seit der stabilen Version wurde nur ein Fehler im Zusammenhang mit Kerneländerungen von 4.20-->5.0 gefunden, alle anderen gemeldeten Probleme hatten damit zu tun, dass die Leute etwas Neues lernten. Wenn die Dienstverwaltung noch einfacher werden sollte, wäre es vielleicht besser, auf MS-Windows umzusteigen (Linus bewahre). Um in der Praxis zu sehen, wie das funktionieren kann, muss man nur ein Obarun live.iso herunterladen und damit herumspielen. Dienste und ihre 66-Skripte installieren, sie aktivieren, beenden, ihre Protokolle ansehen, sie stoppen und starten (während sie aktiviert sind), Dienste in einem Baum zusammenfassen und Bäume von Diensten gemeinsam starten und stoppen lassen, Dienste auf Benutzerebene getrennt vom System haben. Es macht das, was S6 gut macht, und macht es dem Benutzer einfacher, das kugelsichere System unter S6 auszunutzen.

Bilddownloads finden Sie hier:https://web.obarun.org/index.php?id=74 MD5-Prüfungsdateienhttps://repo.obarun.org/iso/

Abgesehen von Init und Service Management haben s6/66 keinerlei Abhängigkeiten von anderen Elementen des Systems. Es ist eine Schicht des Basissystems, die den Rest der Software für sich arbeiten lässt, Init/SVC-MGMt blind. S6 und 66 sind alle in C geschrieben und nicht linux- oder glibc-spezifisch. Die Server von Skarnet (Autoren von s6) laufen seit fast einem Jahrzehnt ohne viele Unterbrechungen auf einem von Musl selbst erstellten System. Alpine, Void und Adelie haben derzeit ebenfalls s6-Software in ihren Repositories, Adelie verwendet sie standardmäßig zur Serviceüberwachung. Void unterstützt jetzt auch 66. Ich weiß nicht, ob und in welchem ​​Umfang jemand s6 auf xxBSD oder andere xxIX-Systeme portiert hat.

verwandte Informationen