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 apache2
als Beispiel: Dann …
- Wann immerder
apache2
Dienst 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:
- Aufsicht
- daemontools
- daemontools-zur-zugabe
- starte es
- Emporkömmling
- systemd
- sysvinit
- s6
- Täter
- Leckereien
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
iptables
ist 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 iptables
weiterhin.
Wie dem auch sei, ein Dienstprogramm namensmonit
wird tun, was Sie wollen. Wenn Sie Debian verwenden, ist es ein apt-get install monit
Ausweg. 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.