Unter Windows können Sie festlegen, was passieren soll, wenn ein Dienst ausfällt. Gibt es eine Standardmethode, um dasselbe unter Linux zu erreichen (insbesondere unter CentOS)?
Ein größerer Teil meiner Frage ist: Wie gehen Sie mit offenen Sockets um - zum Beispiel in TIME_WAIT-, FIN_WAIT1- usw.-Zuständen.
Im Moment, wenn der Dienst, den ich entwickle, abstürzt, muss ich warten, bis die Sockets gelöscht oder der Abhörport geändert wurden, bevor ich ihn manuell neu starten kann.
Danke für Ihre Hilfe.
Antwortet nur auf den Neustart des Dienstes. Ich bin auch auf Monit gestoßen, aber auf CentOS 7 kümmert sich systemd darum. Sie müssen nur diese beiden Zeilen zur .service-Datei hinzufügen (falls sie noch nicht vorhanden sind):
Sehen Informationen finden https://jonarcher.info/2015/08/ensure-systemd-services-restart-on-failure/ .
Wenn Sie einen benutzerdefinierten systemd-Dienst erstellen möchten, können Sie ganz einfach eine eigene Dienstdatei erstellen. Das folgende Beispiel zeigt einen benutzerdefinierten http-Server.
Starten Sie den Editor mit einer neuen Servicedatei:
Fügen Sie den folgenden Inhalt hinzu, den Sie nach Bedarf bearbeiten können:
Ich möchte, dass es beim Booten automatisch startet:
Informieren Sie systemd über die Änderungen und starten Sie den Dienst:
Und jetzt können Sie den Status sehen:
Referenzinformationen finden Sie unter https://scottlinux.com/2014/12/08/how-to-create-a-systemd-service-in-linux-centos-7/
quelle
systemd
der Standard-Service-Manager für die meisten gängigen Distributionen kann das für Sie tun.Sie können rufen Sie
setsockopt(2)
mit für das Hören BuchseSO_REUSEADDR
, so dass Sie in der Lage sein wird , siebind(2)
wieder ohne zu warten , alle Verbindungen auf auslaufen. Eine andere Möglichkeit: Verbindungen vom Kernel trennen. FreeBSD hat einentcpdrop
Befehl dafür, weiß nichts über Linux.quelle
Wenn Ihre Linux-Distribution Upstart anstelle von SysV init verwendet, wird dies durch das
respawn
Schlüsselwort ausgeführt.http://upstart.ubuntu.com/cookbook/#respawn
quelle