GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Einfache Möglichkeit, abgestürzte Prozesse neu zu starten?

Lösung 1:

Ich würde in daemontools (http://cr.yp.to/daemontools.html) nachsehen.

Supervise wurde genau für diesen Zweck entwickelt – um Prozesse zu starten und zu überwachen und sie sofort neu zu starten, wenn sie jemals beendet werden.

Sie könnten immer noch monit verwenden, wenn Sie etwas Komplizierteres als eine einfache "Läuft es noch"-Überprüfung machen müssen, und wenn der Prozess neu gestartet werden muss, dann tun Sie dies durch supervise.

Lösung 2:

Sie können auch /etc/inittab verwenden tote Prozesse mit respawn neu zu starten Aktion.

Siehe inittab-Abschnitt auf http://aplawrence.com/Unixart/startup.html

Lösung 3:

Sie können Event-Handler-Skripte mit Nagios verwenden, wenn Sie diese eingerichtet haben, um Dienste neu zu starten.

Wenn Lack zum Starten eine Root-Berechtigung benötigt (init.d-Skripte tun dies normalerweise), ändern Sie "/etc/init.d/varnish start" in "sudo /etc/init.d/varnish start". Aber das wird wahrscheinlich nicht ganz genug sein, da Sie wahrscheinlich nicht jedem Benutzer, der monit ausführt, alle Befehle als totale sudo nopasswd-Privilegien geben möchten, und es wäre im Grunde genauso schlecht, sudo an ein Shell-Skript zu geben. Sie müssen also herausfinden, welche Befehle in diesem Init-Skript sudo benötigen, diesen Befehlen sudo-Berechtigungen in der Datei /etc/sudoers dem Benutzer monit erteilen und schließlich dieses Init-Skript entsprechend bearbeiten. Oder kann dieser Lack statt dessen vielleicht als Nicht-Root-Benutzer ausgeführt werden?

Schließlich bin ich sicher, dass Sie das wissen, aber ich werde es trotzdem sagen. Sie geben sich eindeutig viel Mühe, ich hoffe, Sie geben sich genauso viel Mühe, herauszufinden, warum der Lack abstürzt, und ihn tatsächlich zu reparieren (oder die Entwickler zu jagen, um herauszufinden, warum) :-)

Aktualisieren:
Dies ist möglicherweise nicht so sauber, aber eine einfache Möglichkeit, dies als Root zu erledigen, besteht darin, ein Skript einzurichten, das überprüft, ob der Prozess in Ordnung ist, und ihn gegebenenfalls startet. Dann führen Sie dieses Skript einfach alle paar Minuten als Cron-Job aus.

Lösung 4:

Eine weitere großartige Methode von StackOverflow:

until myserver; do
    echo "Server 'myserver' crashed with exit code $?.  Respawning.." >&2
    sleep 1
done

Dies könnte der Crontab hinzugefügt werden:

crontab -e

Fügen Sie dann eine Regel hinzu, um Ihr Überwachungsskript zu starten:

@reboot /usr/local/bin/myservermonitor

Oder als Skript in /etc/init.d hinzugefügt

In der StackOverflow-Antwort finden Sie eine detaillierte Erklärung, warum dies ein guter Ansatz ist.


Linux
  1. Der beste Weg, um sicherzustellen, dass ein Skript einmal pro Periode ausgeführt wird?

  2. Prozesse in einer Sitzung in einer interaktiven Shell oder in einem Skript?

  3. Einfache Möglichkeit, HH:MM:SS (Stunden:Minuten:Sekunden.Split Seconds) in Sekunden umzuwandeln

  4. Bash-Skript, das eine begrenzte Anzahl von Befehlen parallel verarbeitet

  5. Beste Möglichkeit, Remote-SSH-Befehle in Batch zu skripten (Windows)

Eine einfache Möglichkeit, symbolische Links in Linux aufzulisten

Eine einfache Möglichkeit, einen Port in Ubuntu 21.10 zu öffnen

Eine einfache Möglichkeit, die NVIDIA-Treiberversion unter Linux zu überprüfen

Eine einfache Möglichkeit, den IOStat-Befehl zu verstehen

Gibt es eine Möglichkeit, Benachrichtigungen vom Bash-Skript in Ubuntu anzuzeigen?

Was ist der schnellste Weg, um ein Skript auszuführen?