Heute will ich mal etwas auf systemctl und systemd eingehen =)
Allgemein
systemd ist ein Init-System und System-Manager. Es handelt sich dabei um den neuen Standard für Linux Maschinen.
Starten und Stoppen von Servicen
Um eine systemd Dienst zu starten, werden die Befehle der Unit-Datei des Dienstes verwenden. Um diesen Befehl auszuführen ist es wichtig auf dem System root zu sein. Der Befehl für das starten eines Dienstes könnte dann so aussehen.
1 | systemctl start application.service |
Alternativ kann man dazu auch eine Kurzschreibweise verwenden.
1 | systemctl start application |
Der Befehl zum Stoppen desDienstes ist fast identisch. Wir tauschen nur start durch stop.
1 | systemctl stop application.service |
Restart und Reloading
Zum Neustarten eines Dienstes kann der restart Befehl verwendet werden.
1 | systemctl restart application.service |
Wenn der Dienst in der Lage ist, seine Konfigurationsdateien neu zu laden ohne den eigentlichen Dienst neuzustarten, kann der reload Befehl verwendet werden.
1 | systemctl reload application.service |
Wenn man sich unsicher ist, ob der Dienst das neu laden der Konfigurationsdateien unterstützt kann man den folgenden Befehl verwenden.
1 | systemctl reload-or-restart application.service |
Hier wird erst versucht die Konfiguration neu zu laden. Sollte dies nicht möglich sein, wird der ganze Dienst neugestartet.
Enabling und Disabling von Services
Die obigen Befehle sind nützlich zum Starten oder Stoppen während der aktuellen Sitzung. Um systemd Dienste automatisch beim Booten zu starten, muss dies extra aktiviert werden. Dafür können wir den folgenden Befehl zur Hand nehmen:
1 | systemctl enable application.service |
Dieser Befehl legt einen symbolischen Link zur Service-Datei an. In der Regel wird dieser Link in /lib/systemd/system or /etc/systemd/system angelegt.
Wollen wir den Service nun nicht mehr beim Booten starten lassen, kann dies mit dem folgenden Befehl wieder deaktiviert werden.
1 | sudo systemctl disable application.service |
Status eines Services
Mit dem folgenden Befehl, kann der Status eines Services geprüft werden.
1 | systemctl status application.service |
Als Beispiel lassen wir uns mal den Status des httpd anzeigen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | [root@localhost ~]# systemctl status httpd.service httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled) Active: active (running) since Di 2015-09-01 12:50:37 CEST; 2min 37s ago Main PID: 5422 (httpd) Status: "Total requests: 2; Current requests/sec: 0; Current traffic: 0 B/sec" CGroup: /system.slice/httpd.service ├─5422 /usr/sbin/httpd -DFOREGROUND ├─5424 /usr/sbin/httpd -DFOREGROUND ├─5425 /usr/sbin/httpd -DFOREGROUND ├─5426 /usr/sbin/httpd -DFOREGROUND ├─5427 /usr/sbin/httpd -DFOREGROUND └─5428 /usr/sbin/httpd -DFOREGROUND Sep 01 12:50:37 localhost.localdomain systemd[1]: Starting The Apache HTTP Server... Sep 01 12:50:37 localhost.localdomain httpd[5422]: AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain....is message Sep 01 12:50:37 localhost.localdomain systemd[1]: Started The Apache HTTP Server. Hint: Some lines were ellipsized, use -l to show in full. |
Die Ausgabe gibt uns einen Überblick über den aktuellen Status des httpd. Hier würde wir auch sehen, wenn es Probleme mit dem httpd gibt. Als Beispiel kommentiere ich die letzten paar Zeilen einer vHost Datei aus und starte httpd neu. Nachdem der Neustart fehlgeschlagen ist, lasse ich mir wieder den Status des httpd anzeigen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | [root@localhost conf.d]# systemctl status httpd.service httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled) Active: failed (Result: exit-code) since Di 2015-09-01 12:59:02 CEST; 1min 47s ago Process: 5691 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=1/FAILURE) Process: 5690 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=exited, status=1/FAILURE) Main PID: 5690 (code=exited, status=1/FAILURE) Sep 01 12:59:02 localhost.localdomain systemd[1]: Starting The Apache HTTP Server... Sep 01 12:59:02 localhost.localdomain httpd[5690]: httpd: Syntax error on line 353 of /etc/httpd/conf/httpd.conf: Syntax error on line 58 of /etc/httpd/conf.d/nagios....figuration Sep 01 12:59:02 localhost.localdomain systemd[1]: httpd.service: main process exited, code=exited, status=1/FAILURE Sep 01 12:59:02 localhost.localdomain kill[5691]: kill: cannot find process "" Sep 01 12:59:02 localhost.localdomain systemd[1]: httpd.service: control process exited, code=exited status=1 Sep 01 12:59:02 localhost.localdomain systemd[1]: Failed to start The Apache HTTP Server. Sep 01 12:59:02 localhost.localdomain systemd[1]: Unit httpd.service entered failed state. Hint: Some lines were ellipsized, use -l to show in full. |
Wir werden nun auf den Fehler in der entsprechenden Datei hingewiesen und können diesen ausbessern.
Damit haben wir erstmal die Grundlagen für systemclt / systemd durch.
[…] ist mittlerweile jedem Admin der sich außerhalb der Windows Welt bewegt bekannt. Wie man mit systemctl Dienste starten und stoppen kann, haben ich hier im Blog schon vor einiger Zeit erklärt. Heute will ich ein paar nützliche […]