Die Verwaltung von Diensten ist eine Schlüsselverantwortung für Systemadministratoren. Es besteht kein Zweifel, dass der Übergang zwischen dem älteren SysV-Verfahren (unter Verwendung des service
und chkconfig
Befehle) und das neuere systemd
-basierte Befehle (wie systemctl
) war umstritten. Tatsächlich haben viele Systemadministratoren immer noch sehr starke Gefühle auf die eine oder andere Weise.
Die Realität ist, dass viele Distributionen, einschließlich Red Hat Enterprise Linux (RHEL), damit begonnen haben, Dienste mit systemd
zu verwalten . Daher müssen Sie und ich wissen, wie man mit systemctl
arbeitet Verwaltungsbefehl.
Ich bin kein Autor/Trainer/Administrator, der davon ausgeht, dass jeder fortgeschritten ist. Vor diesem Hintergrund werde ich diesen Artikel an die Leute richten, die eine grundlegende und einfache Erklärung benötigen, wie und wann das häufigere systemctl
verwendet wird Unterbefehle. Am Ende liefere ich noch einen tollen Trick, um schnell alle systemctl
anzuzeigen Unterbefehle.
Hinweis:Die Systemctl-Manpage bezeichnet das zweite Wort in der Zeichenfolge als „Befehl“, was etwas verwirrend erscheint. Ich werde auf systemctl
verweisen selbst als Befehl , dann die darauf folgende Zeichenfolge als Unterbefehl . Das Argument ist der Name des Dienstes und nimmt die dritte Position in der Syntax ein.
Hier ist ein Syntaxbeispiel:
systemctl subcommand argument
# systemctl status sshd
Ich werde demonstrieren, wie und wann systemctl
verwendet wird . Die meisten meiner Beispiele verwenden den gemeinsamen sshd
Dienst.
[ Den Lesern gefiel auch: Wie ich lernte, mir keine Sorgen mehr zu machen und systemd zu lieben]
Dienststatus
Der beste Ausgangspunkt ist, die aktuelle Funktionalität des Dienstes zu verstehen. Ich beginne mit dem einfachsten Ansatz, der Verwendung des status
Unterbefehl:
# systemctl status sshd
Die Idee ist natürlich, dass Sie sich gerade an einen unbekannten Linux-Server gesetzt haben und den aktuellen Status von sshd
kennen müssen Service. Beachten Sie, dass viele andere Informationen bereitgestellt werden, einschließlich einer Zusammenfassung des Dienstes, woher er geladen wurde, Status, Prozess-ID (PID) und kürzliche Änderungen.
Der systemctl status
Der Befehl ist auch bei der Fehlerbehebung hilfreich. Wenn ich eine Konfiguration behebe, überprüfe ich fast sofort ihren Status, indem ich systemctl
verwende . Warum sich mit Firewalls, SELinux und Konfigurationsdateien herumschlagen, wenn der Dienst nicht einmal läuft?
Jetzt wissen Sie also, wie Sie den Status von Diensten wie SSH überprüfen. Wie manipuliert man diesen Status?
Dienste starten und stoppen
Wenn Sie eine Konfigurationsdatei für einen laufenden Dienst ändern, müssen Sie entweder neu starten oder neu laden der Service. Dadurch liest der Dienst die Datei erneut und implementiert daher die Änderungen. Früher haben Sie den service
verwendet Befehl, wie in den folgenden Beispielen:
# service sshd restart
Dienste unter systemd
werden über das systemctl
verwaltet Befehl. So starten Sie den SSH-Dienst mit systemctl
neu , geben Sie ein:
# systemctl restart sshd
Ich persönlich finde diese Syntax etwas einfacher. Es liest sich fast wie ein Satz:"Systemctl, please restart sshd."
Die Syntax ist ähnlich, wenn Sie einen Dienst entweder stoppen oder starten möchten:
# systemctl stop sshd
# systemctl start sshd
Dienste, die sich weigern, ordnungsgemäß zu stoppen, können mit systemctl
beendet werden , zu. Zum Beispiel, um sshd
zu beenden Geben Sie Folgendes ein:
# systemctl kill sshd
Nachladedienste sind etwas anders. Das reload
Unterbefehl bewirkt nur, dass der Dienst die Konfigurationsdatei erneut liest, während der restart
Unterbefehl beendet alle aktuellen Verbindungen und liest die Konfigurationsdatei neu ein.
Wenn Sie beispielsweise systemctl restart sshd
eingeben , werden alle aktuellen SSH-Verbindungen getrennt. Wenn Sie es jedoch neu laden, bleiben bestehende Verbindungen erhalten. In beiden Fällen wird die Konfigurationsdatei neu eingelesen und eventuelle Änderungen implementiert.
Das Neuladen verursacht weniger Ausfallzeiten, wird aber nicht von allen Diensten unterstützt.
Der start
, stop
, restart,
und reload
Unterbefehle wirken sich nur auf die aktuelle Laufzeit aus.
Dienste aktivieren und deaktivieren
Viele Linux-Neulinge sind verwirrt über den Unterschied zwischen start
/stop
und enable
/disable
. Ich habe bereits start
besprochen , stop
, und restart
im vorherigen Abschnitt. Start
und stop
werden verwendet, um den aktuellen Status des Dienstes zu ändern. Wenn der Server jedoch neu gestartet wird, wird der Status des Dienstes auf die standardmäßige Starteinstellung zurückgesetzt. Mit anderen Worten, wenn ich sshd
stoppe service ausführen und dann meinen Server neu starten, wird der Boot-Vorgang die Konfigurationsdatei untersuchen und sshd
entweder starten oder nicht starten , je nachdem, was angegeben ist. Wenn ich den Dienst stoppe und dann neu starte und die Konfigurationsdatei sagt, dass der Dienst beim Booten gestartet werden soll, wird er wieder ausgeführt.
Bisher haben Sie die chkconfig
verwendet Befehl, um die Starteinstellung des Dienstes für jeden Runlevel zu definieren. Hier ist ein Beispiel:
# chkconfig --level 35 sshd on
Dieser Befehl aktiviert sshd
in Runlevel 3 und 5 zu starten.
Mit systemctl
, das Konfigurieren der Standardstarteinstellung ist die Arbeit von enable
und disable
Unterbefehle. Die Syntax ist dieselbe wie beim start
, stop
, und restart
Unterbefehle. Um beispielsweise festzulegen, dass SSH beim Booten des Servers gestartet wird, geben Sie Folgendes ein:
# systemctl enable sshd
Ebenso, um SSH nicht zu konfigurieren um während des Systemstarts zu starten, geben Sie ein:
# systemctl disable sshd
Das Konfigurieren der standardmäßigen Startkonfiguration für Dienste ist einfach, ebenso wie das Starten und Stoppen von Diensten. Es scheint jedoch einige Verwirrung darüber zu geben, die beiden zusammen zu verwenden.
Benutze start und enable zusammen
Einige finden es seltsam, dass das Aktivieren eines Dienstes ihn nicht startet. Wenn Sie beispielsweise gerade ein neues Programm heruntergeladen haben und es starten möchten, um seine Funktionalität zu testen, und Sie es so konfigurieren möchten, dass es beim Booten des Servers gestartet wird, müssen Sie zwei Befehle eingeben:
# systemctl start sshd
# systemctl enable sshd
Das Deaktivieren eines Dienstes erfolgt auf die gleiche Weise. Geben Sie systemctl disable sshd
ein um zu verhindern, dass SSH beim Booten des Servers gestartet wird. Wenn SSH jedoch in der aktuellen Laufzeit ausgeführt wird, bleibt es aktiv, auch wenn es deaktiviert ist. Sie müssen stop
SSH, um es in der aktuellen Laufzeit auszuschalten.
Um beispielsweise SSH sowohl zu stoppen als auch zu verhindern, dass es beim Systemstart gestartet wird, geben Sie Folgendes ein:
# systemctl stop sshd
# systemctl disable sshd
Denken Sie daran, den status
des Dienstes zu überprüfen Wenn Sie sich nicht sicher sind, geben Sie Folgendes ein:
# systemctl status sshd
Sie können überprüfen, ob ein Dienst so konfiguriert ist, dass er automatisch startet, indem Sie ein anderes systemctl
verwenden Unterbefehl:is-enabled
. Um beispielsweise anzuzeigen, ob SSH aktiviert ist, geben Sie Folgendes ein:
# systemctl is-enabled sshd
Viele Unterbefehle - der Trick
Ich habe einige systemctl
behandelt Unterbefehle, einschließlich start
, stop
, restart
, enable
, disable
, status
, und andere. Das ist viel zu merken! Hier kommt Ihr alter Freund Tab-Vervollständigung ins Spiel. Probieren Sie die folgende Technik auf Ihrem System aus:Geben Sie systemctl
ein und fügen Sie dann ein einzelnes Leerzeichen hinzu. Drücken Sie die Tabulatortaste zweimal drücken, und bash zeigt alle verfügbaren systemctl
an Unterbefehle! Dieser Tab-Vervollständigungs-Trick ist einer, den meiner Meinung nach nur wenige Systemadministratoren genug nutzen.
[ Möchten Sie Ihre Fähigkeiten als Systemadministrator testen? Machen Sie noch heute einen Kompetenztest. ]
Abschluss
Wie Sie sehen können, verwalten Sie Dienste über systemctl
Befehl ist wirklich nicht so schwierig. Ich finde es einfacher und logischer als den älteren service
und chkconfig
Befehle, persönlich. Es ist auch praktisch, nur einen Befehl zu haben, um die Dienste zu verwalten, anstatt zwei.
Hier sind die wichtigsten Punkte, die Sie sich merken sollten:
- Verwenden Sie start/stop/restart, um die aktuelle Laufzeit zu verwalten.
- Verwenden Sie start/stop/restart/reload nach dem Bearbeiten von Konfigurationsdateien.
- Verwenden Sie aktivieren/deaktivieren, um die standardmäßige Startaktion zu verwalten.
- Verwenden Sie den Status sehr früh im Fehlerbehebungsprozess.
Schließlich müssen Sie sich nicht alle verfügbaren systemctl
merken Unterbefehle. Geben Sie einfach den systemctl
ein Befehl und folgen Sie ihm mit einem Leerzeichen, und drücken Sie dann Tab zweimal. Die in Bash integrierte Funktion zum Vervollständigen von Tabs erledigt den Rest!
Sysadmins manipulieren regelmäßig Dienste, und hoffentlich sind Sie ein wenig vertrauter mit der Verwendung des häufigeren systemctl
Unterbefehle.