Systemd ist das Init-System auf den meisten modernen Distributionen. Es bietet eine einheitliche Methode zur Verwaltung von Prozessen, Diensten und Logs und ersetzt die aelteren SysVinit und Upstart. Im Vergleich zu einfachen Init-Skripten bietet es deklarative Konfiguration, automatische Abhaengigkeitsaufloesung, parallelen Dienststart und erweiterte Ressourcensteuerung. Das Verstaendnis von systemd ist fuer jeden unverzichtbar, der Linux-Server verwaltet.
Grundlegende Befehle¶
systemctl start|stop|restart|reload|status nginx
systemctl enable|disable nginx
systemctl list-units --type=service --state=failed
systemctl list-timers # systemd-Timer (Cron-Ersatz)
Der Befehl systemctl status zeigt den Dienststatus einschliesslich der letzten Log-Zeilen, PID und Laufzeit. Fuer detailliertere Diagnostik verwenden Sie journalctl -u dienst.
Eigener Dienst¶
[Unit]
Description=Meine Anwendung
After=network.target postgresql.service
[Service]
Type=simple
User=app
WorkingDirectory=/opt/myapp
ExecStart=/opt/myapp/bin/server --port 8080
Restart=on-failure
RestartSec=5
EnvironmentFile=/opt/myapp/.env
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable --now myapp
Die [Unit]-Sektion definiert Abhaengigkeiten — After stellt die korrekte Startreihenfolge sicher, Requires erstellt eine harte Abhaengigkeit. [Service] konfiguriert die Ausfuehrung: Type=simple fuer direkten Start, Type=forking fuer Daemons, Type=notify fuer Dienste, die Bereitschaft signalisieren. Restart=on-failure startet bei Fehlern automatisch neu, RestartSec legt die Verzoegerung zwischen Versuchen fest.
Ressourcenlimits¶
[Service]
CPUQuota=200%
MemoryMax=2G
LimitNOFILE=65535
ProtectSystem=strict
PrivateTmp=yes
NoNewPrivileges=yes
Systemd-cgroups-Limits isolieren Dienste und verhindern, dass ein Dienst alle Systemressourcen verbraucht. ProtectSystem=strict gewaehrleistet schreibgeschuetzten Zugriff auf Systemverzeichnisse, PrivateTmp isoliert /tmp fuer jeden Dienst. Diese Sicherheitsdirektiven werden fuer Produktionsbereitstellungen empfohlen.
Debugging¶
systemctl status myapp -l # vollstaendiger Status mit Logs
journalctl -u myapp --since '5 min ago' # Logs der letzten 5 Minuten
systemd-analyze blame # was den Boot verlangsamt
systemd-analyze critical-chain myapp # Abhaengigkeitskette
Systemd ist Standard¶
Lernen Sie Unit-Dateien, Abhaengigkeiten und Ressourcenlimits. Die Investition in systemd-Wissen zahlt sich bei jeder Bereitstellung und jedem Troubleshooting aus.