Dein Zuhause, deine Regeln – smart und individuell.

Zurück


systemctl

systemctl ist ein zentraler Befehl auf Linux-Systemen, die das Systemd-Init-System nutzen. Es dient dazu, Dienste und andere Systemd-Einheiten zu verwalten. Systemd selbst ist ein leistungsstarker Dienst-Manager, der nicht nur den Systemstart koordiniert, sondern auch die Überwachung und Steuerung laufender Dienste übernimmt sowie viele weitere Funktionen bietet.

 

Damit systemctl weiß, wie ein Dienst gestartet werden soll, muss für jeden Dienst eine spezielle Konfigurationsdatei vorhanden sein. Diese Datei enthält alle notwendigen Informationen wie Startbefehle, Abhängigkeiten und Umgebungsvariablen. Sie wird zum Beispiel in /etc/systemd/system/ gespeichert.

 

Für die Erstellung solcher .service-Dateien empfehle ich, sich immer an die offiziellen Anleitungen zu halten. Sie bieten die zuverlässigsten Informationen und stellen sicher, dass der Dienst korrekt eingerichtet wird.

 

 Um Dir den Einstieg zu erleichtern, erkläre ich Dir die grundlegenden Befehle von systemctl und zeige Dir anhand eines Beispiels den möglichen Inhalt einer Systemd-Service-Datei von Zigbee2MQTT.


Befehle:

systemctl start <dienstname>
Dieser Befehl startet einen Dienst z.b. den dienst zigbee2mqtt: 

sudo systemctl start zigbee2mqtt

systemctl stopt <dienstname>
Dieser Befehl stoppt einen Dienst z.b. den Dienst zigbee2mqtt: 

sudo systemctl stop zigbee2mqtt

systemctl status <dienstname>
Dieser Befehl zeigt Dier den Aktuellen Status (enable/disable) eines Dienstes z.b. den dienst zigbee2mqtt: 

sudo systemctl status zigbee2mqtt

systemctl enable <dienstname>
Aktiviert den automatischen Start eines Dienstes z.b. den Dienst zigbee2mqtt: 

sudo systemctl enable zigbee2mqtt

systemctl disable <dienstname>
Deaktiviert den automatischen Start eines Dienstes z.b. den Dienst zigbee2mqtt: 

sudo systemctl disable zigbee2mqtt

systemctl is-enable <dienstname>
Dieser Befehl zeigt Dir ob ein Dienst z.b. den Dienst zigbee2mqtt im autostart aktiviert ist : 

sudo systemctl is-enable zigbee2mqtt


Erklärung einer Konfigurationsdatei für Zigbee2MQTT

(Die offizielle Anleitung findest unter www.zigbee2mqtt.io )

 

Datei erstellen:

sudo nano /etc/systemd/system/zigbee2mqtt.service  


Dateiinhalt:

[Unit]
Description=zigbee2mqtt
After=network.target


[Service]
Environment=NODE_ENV=production
Type=notify
ExecStart=/usr/bin/node index.js
WorkingDirectory=/opt/zigbee2mqtt
StandardOutput=inherit
# Or use StandardOutput=null if you don't want Zigbee2MQTT messages filling syslog, for more options see systemd.exec(5)
StandardError=inherit
WatchdogSec=10s
Restart=always
RestartSec=10s
User=pi


[Install]
WantedBy=multi-user.target


Beschreibung der Konfiguration

[Unit]
Dieser Abschnitt enthält allgemeine Informationen über den Dienst und seine Abhängigkeiten.

  • Description=zigbee2mqtt
    Beschreibt den Dienst. Dieser Text erscheint, wenn du systemctl status zigbee2mqtt aufrufst.
  • After=network.target
    Legt fest, dass der Dienst erst gestartet wird, nachdem das Ziel network.target (Netzwerkdienste) verfügbar ist. Dies ist wichtig, da Zigbee2MQTT auf Netzwerkzugriff angewiesen ist.

[Service]
Hier wird definiert, wie der Dienst gestartet und ausgeführt wird.

  • Environment=NODE_ENV=production
    Setzt die Umgebungsvariable NODE_ENV auf production. Dies ist eine gängige Einstellung in Node.js-Anwendungen, um die produktive Umgebung zu aktivieren.
  • Type=notify
    Gibt an, dass der Dienst Systemd benachrichtigt, wenn er bereit ist. Zigbee2MQTT nutzt dies, um Systemd über seinen Startstatus zu informieren.
  • ExecStart=/usr/bin/node index.js
    Der Befehl, der den Dienst startet. In diesem Fall wird die Node.js-Umgebung verwendet, um die index.js-Datei auszuführen (das Hauptskript von Zigbee2MQTT).
  • WorkingDirectory=/opt/zigbee2mqtt
    Gibt an, dass das Programm im Verzeichnis /opt/zigbee2mqtt ausgeführt wird, in dem Zigbee2MQTT installiert ist.
  • StandardOutput=inherit
    Leitet die Standardausgabe (Logs) des Programms an das Systemprotokoll weiter. Du kannst dies ändern, z. B. auf null, um Logs zu unterdrücken.
  • StandardError=inherit
    Leitet Fehlerausgaben ebenfalls weiter.
  • WatchdogSec=10s
    Aktiviert den Watchdog-Timer. Das bedeutet, dass Zigbee2MQTT regelmäßig Lebenszeichen an Systemd senden muss. Geschieht dies nicht innerhalb von 10 Sekunden, wird der Dienst automatisch neugestartet.
  • Restart=always
    Konfiguriert den Dienst so, dass er bei Abstürzen oder Beenden automatisch neu gestartet wird.
  • RestartSec=10s
    Gibt an, dass der Dienst 10 Sekunden nach einem Absturz oder Neustart neu gestartet wird.
  • User=pi
    Der Dienst wird unter dem Benutzer pi ausgeführt, anstatt unter Root. Dies ist eine Sicherheitsmaßnahme. Hier musst Du deinen 
    Benutzer eintragen.

[Install]
Legt fest, wie und wann der Dienst aktiviert wird.

  • WantedBy=multi-user.target
    Gibt an, dass dieser Dienst Teil des multi-user.target ist, was einer nicht-grafischen Benutzeroberfläche entspricht. Der Dienst wird bei einem Multi-User-Start des Systems aktiviert.


    Fazit
    Systemctl ist ein mächtiges Werkzeug für die Verwaltung von Diensten auf Linux-Systemen, die das Systemd-Init-System verwenden. Es ermöglicht Dir die Steuerung von Diensten wie Starten, Stoppen und Überwachen sowie das Einrichten automatischer Starts beim Systemstart. Die Grundlage für jeden Dienst ist eine korrekt erstellte Konfigurationsdatei, die alle wichtigen Informationen für Systemd bereitstellt.

    Durch die Nutzung von systemctl-Befehlen und das Verständnis einer Konfigurationsdatei, wie in diesem beispielsweise für Zigbee2MQTT, kannst Du Dienste effizient Eingerichten und verwalten werden. Für einen Reibungslosen Ablauf beachte bitte die offiziellen Anleitungen und stelle sicher das Du von deinem System ein Backup hast. Solange Du ein ein aktuelles Backup deines Systems hast, brauchst Du keine Angst vor möglichen Fehlern haben, denn wenn etwas schief gelaufen ist, spielst Du einfach dein Backup ein. Dann ist wieder alles wie vorher.