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

So starten Sie einen Dienst bei einem Fehler in Linux automatisch neu

Lösung 1:

Nur den Teil des Dienstneustarts beantworten. Ich bin auch auf Monit gestoßen, aber unter CentOS 7 erledigt systemd das alles für Sie. Sie müssen nur diese beiden Zeilen zur .service-Datei hinzufügen (falls sie noch nicht dort sind):

Restart=always
RestartSec=3

Siehe https://jonarcher.info/2015/08/ensure-systemd-services-restart-on-failure/ als Referenz.

Wenn Sie einen benutzerdefinierten systemd-Dienst erstellen möchten, ist es ziemlich einfach, Ihre eigene Dienstdatei zu schreiben. Sehen Sie sich das Beispiel unten für einen benutzerdefinierten HTTP-Server an.

Starten Sie den Editor mit einer neuen Servicedatei:

vim /etc/systemd/system/httpd.service

Und fügen Sie den folgenden Inhalt hinzu, den Sie nach Bedarf bearbeiten können:

[Unit]
Description=My httpd Service
After=network.target

[Service]
Type=simple
User=root
Environment=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
Environment=PERLLIB=/perl
ExecStart=/bin/httpd /etc/httpd.conf
Restart=always
RestartSec=3

[Install]
WantedBy=multi-user.target

Ich möchte, dass es beim Booten automatisch startet:

systemctl enable httpd

Informieren Sie systemd über die Änderungen und starten Sie den Dienst:

systemctl daemon-reload
systemctl start httpd

Und jetzt können Sie den Status sehen:

systemctl status httpd

Als Referenz siehe https://scottlinux.com/2014/12/08/how-to-create-a-systemd-service-in-linux-centos-7/

Lösung 2:

monit ist eine großartige Möglichkeit, Dienste zu überwachen und neu zu starten, wenn sie ausfallen – und Sie werden dies wahrscheinlich am Ende für andere wichtige Dienste (wie Apache) verwenden. Es gibt einen netten Artikel über nixCraft, der detailliert beschreibt, wie man dies speziell für Dienste verwendet, obwohl monit selbst hat darüber hinaus noch viele weitere Funktionen.

Was den Socket-Aspekt betrifft, hat @galraen genau hier geantwortet.

Lösung 3:

Sie können setsockopt(2) anrufen für Abhörbuchse mit SO_REUSEADDR , also können Sie bind(2) es erneut, ohne auf das Ablaufen aller Verbindungen zu warten. Eine andere Möglichkeit:Verbindungen vom Kernel trennen. FreeBSD hat tcpdrop Befehl dafür, keine Ahnung von Linux.

Lösung 4:

Wenn Ihre Linux-Distribution Upstart anstelle von SysV init verwendet, dann wird der respawn Schlüsselwort tut dies.

http://upstart.ubuntu.com/cookbook/#respawn


Linux
  1. So erstellen Sie einen Systemd-Dienst unter Linux

  2. Wie verwende ich den Linux-Software-Watchdog?

  3. Wie starte ich einen entfernten MySQL-Server, der unter Ubuntu Linux läuft?

  4. Wie starte ich einen Linux-Hintergrundprozess automatisch neu, wenn er fehlschlägt?

  5. Wie dokumentiert man die Konfiguration des Linux-Servers?

So starten Sie Netzwerkdienste unter Linux neu

So starten Sie Bluetooth in Ubuntu 20.04 neu

So starten Sie einen Dienst über systemctl unter Linux neu

So verwenden Sie systemctl unter Linux

Wie lösche ich den DNS-Cache unter Linux?

So starten, stoppen oder starten Sie Netzwerkdienste unter Rocky Linux 8