Dienste unter Linux werden über ihre Konfigurationsdatei verwaltet. Wenn Änderungen an der Konfigurationsdatei eines Dienstes vorgenommen werden, muss ein Neustart des Dienstes eingeleitet werden, um die Änderungen zu übernehmen. Beim Neustart des Dienstes wertet der Systemd die Konfigurationsdatei erneut aus und übernimmt die Änderungen.
In diesem Handbuch werde ich erläutern, wie Sie mit systemctl einen Dienst unter Linux neu starten.
Notiz: Dieses Handbuch enthält Befehle und Anweisungen, die unter Ubuntu 22.04 ausgeführt werden. Der Befehl funktioniert ohne Probleme auf Distributionen, die mit dem systemd-Dienstmanager geliefert werden.
Der Befehl systemctl restart
Der Neustart Der Befehl stoppt im Wesentlichen einen Dienst und startet ihn erneut. Wenn der Dienst oder die Einheit nicht betriebsbereit ist, leitet der Neustartbefehl den Betrieb ein.
Der Neustartbefehl entfernt nicht die Prozesse, die mit dem Dienst verknüpft sind. Nehmen Sie das Beispiel von Dateideskriptoren, bei denen es sich um nicht negative Kennungen handelt, die das Betriebssystem den von einem Dienst geöffneten Dateien zuweist. Wenn Sie einen Dienst neu starten, bleibt der mit diesem Dienst verknüpfte Dateideskriptor während des Neustartvorgangs dort.
Wenn Sie alle mit dem Dienst verknüpften Prozesse löschen möchten, müssen Sie dies explizit tun stoppen der Service und Start es wieder.
So starten Sie einen Dienst neu
Unter Linux können Sie einen Dienst mithilfe von neu starten sudo systemctl Befehlszeilentool mit dem Neustart Option und Angabe ihres Namens. Die allgemeine Syntax ist unten angegeben:
Sudo systemctl neu starten [ Dienstname ]
Du wirst brauchen Sudo Berechtigungen zum Neustarten eines Dienstes.
Starten wir zum Beispiel das neu ssh Service.
Sudo systemctl startet ssh.service neuUm mehrere Dienste neu zu starten, hängen Sie jeden Dienstnamen nach dem an Neustart Befehl mit einem Leerzeichen.
Sudo systemctl startet ssh.service smbd.service neuWeitere Neustartbefehle finden Sie in der folgenden Tabelle:
Versuchen Sie es neu | Es stoppt oder startet den oder die angegebenen Dienste. Wenn der Dienst nicht ausgeführt wird, wird er nicht gestartet |
Neu laden oder neu starten | Laden Sie den oder die unterstützten Dienste neu. Wenn der Dienst nicht unterstützt wird, starten Sie ihn neu und aktivieren Sie ihn |
Versuchen Sie es neu zu laden oder versuchen Sie es neu | Laden Sie den oder die unterstützten Dienste neu. Wenn der Dienst nicht unterstützt wird, starten Sie ihn neu, ohne ihn zu aktivieren |
In den obigen Befehlen ist die .Service Die Erweiterung ist optional.
So starten Sie einen Dienst automatisch neu
Wenn unter Linux ein Dienst ausfällt, dann systemd habe es standardmäßig neu gestartet. Dennoch kann es in vielen Fällen erforderlich sein, die Art und Weise zu ändern, in der ein Dienst neu gestartet wird. Beispielsweise kann es sein, dass während des Debugging-Prozesses des maßgeschneiderten Dienstes manuelle Maßnahmen erforderlich sind.
Die Systemd-Unit-Dateien oder Service-Dateien befinden sich auf /etc/systemd/system oder /lib/systemd/system hängt hauptsächlich davon ab, wie der Dienst erstellt wird. Um die Unit-Dateien unter Linux aufzulisten, verwenden Sie den folgenden Befehl:
ls / lib / systemd / SystemSie können die Konfigurationsdateien verschiedener Dienste sehen. Öffnen wir das ssh.service Datei mit der Nano Editor.
Sudo Nano / lib / systemd / System / ssh.serviceHier können Sie die ändern Neu starten Einstellung. Standardmäßig ist es auf eingestellt bei Ausfall . Weitere Optionen zum Neustarten eines Dienstes sind unten aufgeführt:
- NEIN
- stets
- auf Erfolg
- bei Ausfall
- an-anormal
- Ein-Abbruch
- auf Wachhund
Eine weitere Option in der Unit-Service-Datei ist RestartSec Hiermit wird die Anzahl der Sekunden angegeben, nach denen der Dienst neu gestartet wird.
[ Service ]Neu starten =immer
RestartSec = 5
Diese Anweisungen bedeuten, dass der Dienst beim Booten neu gestartet wird und bei einer Unterbrechung nach 5 Sekunden neu gestartet wird.
Führen Sie nach dem Ändern der Einstellung den folgenden Befehl aus, um die Änderungen zu übernehmen.
Sudo systemctl reload-daemonWeitere wichtige Einstellungen, die berücksichtigt werden müssen, sind: StartLimitIntervalSec Und StartLimitBurst . Diese Optionen sind nützlich, um die maximale Zeit und die maximalen Wiederholungsversuche für den Neustart eines Dienstes festzulegen.
[ Einheit ]StartLimitIntervalSec = 300
StartLimitBurst = 4
Die obige Anweisung gibt an, dass der Systemd den Versuch, einen Dienst neu zu starten, automatisch beendet, wenn er nach 300 Sekunden und 4 Wiederholungsversuchen nicht startet.
Um zu überprüfen, ob der Dienst nach 5 Sekunden neu startet oder nicht, beenden Sie den Dienst mithilfe der PID des Dienstes und des töten Befehl.
Sudo töten -9 [ PID ]Nach 5 Sekunden wird der Dienst neu gestartet; Benutze die Journalctl Befehl zum Überprüfen des Status des ssh.service .
Journalctl -In ssh.service
So starten Sie einen Dienst neu, wenn ein abhängiger Dienst neu gestartet wird
Unter Linux sind viele Dienste voneinander abhängig und müssen daher neu gestartet werden, wenn ein abhängiger Dienst neu gestartet wird.
In der Unit-Dienstdatei gibt es drei verschiedene Optionen zum Neustarten eines Dienstes, wobei ein abhängiger Dienst neu gestartet wird.
- Teil von
- Bindet an
- Erfordert
Alle diese Optionen erfüllen die gleiche Aufgabe.
Nehmen wir ein Beispiel für ssh.service, das von apparmor.service abhängt. ein Linux-Sicherheitsmodul, um den erforderlichen Zugriff bereitzustellen. Um die Abhängigkeiten eines Dienstes unter Linux aufzulisten, verwenden Sie systemctl mit Listenabhängigkeiten Befehls- und Dienstname.
systemctl list-dependencies ssh.service
Wenn Sie also den ssh.service neu starten möchten, wenn Sie den apparmor.service neu starten, müssen Sie die Option PartOf, BindsTo oder Requires zusammen mit dem Dienstnamen in den Abschnitt [Unit] der Datei apparmor.service aufnehmen.
Öffnen Sie die Datei apparmor.service.
Sudo Nano / lib / systemd / System / apparmor.serviceFügen Sie die folgende Zeile im Abschnitt [Einheit] hinzu.
Teil von =ssh.service
Speichern Sie die Datei und führen Sie den Befehl daemon-reload aus.
Sudo systemctl daemon-reloadStarten Sie nun das neu ssh.service und dann überprüfen Sie die apparmor.service Protokoll.
Sie werden es bemerken apparmor.service gleichzeitig neu gestartet ssh.service neu gestartet.
Abschluss
Um einen oder mehrere Dienste unter Linux neu zu starten, müssen Sie Folgendes tun: systemctl Der Befehl wird mit dem verwendet Neustart Möglichkeit. Der systemctl ist ein Befehlszeilendienstprogramm zur Verwaltung von Systemd-Diensten. Der Neustart Diese Option startet einen Dienst und stoppt ihn dann, wodurch ein inaktiver Dienst aktiviert wird. Sie können einen Dienst jedoch neu starten, ohne ihn zu aktivieren, indem Sie die verwenden Versuchen Sie es neu Möglichkeit.