Systemd ist das Standard-Init-System auf modernen Linux-Distributionen. Es startet und verwaltet alle Dienste. In diesem Artikel lernen Sie die wichtigsten systemctl-Befehle.
Was ist Systemd?
Systemd ist:
- Init-System: Startet das System und alle Dienste
- Service-Manager: Verwaltet Hintergrunddienste
- Log-Manager: Zentrales Logging mit journald
Grundlegende systemctl-Befehle
Service starten/stoppen
systemctl start nginx # Starten
systemctl stop nginx # Stoppen
systemctl restart nginx # Neustart
systemctl reload nginx # Konfiguration neu laden (ohne Neustart)Status prüfen
systemctl status nginxAusgabe:
● nginx.service - A high performance web server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled)
Active: active (running) since Mon 2024-01-26 10:00:00 UTC
Main PID: 1234 (nginx)
Tasks: 2 (limit: 2340)
Memory: 5.2MAutostart aktivieren/deaktivieren
systemctl enable nginx # Autostart an
systemctl disable nginx # Autostart aus
systemctl is-enabled nginx # PrüfenKombiniert: Aktivieren und starten
systemctl enable --now nginxServices auflisten
Alle laufenden Services
systemctl list-units --type=service --state=runningAlle Services (auch inaktive)
systemctl list-units --type=service --allFehlgeschlagene Services
systemctl --failedService-Status verstehen
| Status | Bedeutung | |--------|-----------| | active (running) | Läuft normal | | active (exited) | Einmalig gelaufen, beendet | | inactive (dead) | Nicht gestartet | | failed | Fehlgeschlagen | | activating | Startet gerade |
Unit-Dateien
Speicherort
/lib/systemd/system/- System-Units (vom Paketmanager)/etc/systemd/system/- Lokale/Angepasste Units/run/systemd/system/- Temporäre Units
Unit-Datei anzeigen
systemctl cat nginxUnit-Datei bearbeiten
systemctl edit nginx # Override erstellen
systemctl edit --full nginx # Vollständig bearbeitenEigene Service-Unit erstellen
Erstellen Sie /etc/systemd/system/meinapp.service:
[Unit]
Description=Meine Anwendung
After=network.target
[Service]
Type=simple
User=www-data
Group=www-data
WorkingDirectory=/var/www/meinapp
ExecStart=/usr/bin/node /var/www/meinapp/server.js
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.targetDann aktivieren:
systemctl daemon-reload # Units neu einlesen
systemctl enable meinapp
systemctl start meinappUnit-Datei Erklärung
[Unit] Sektion
[Unit]
Description=Beschreibung des Dienstes
Documentation=https://example.com/docs
After=network.target mysql.service # Starte nach diesen
Requires=mysql.service # Braucht diese
Wants=redis.service # Möchte diese (optional)[Service] Sektion
[Service]
Type=simple # simple, forking, oneshot, notify
User=www-data # Als welcher Benutzer?
Group=www-data
WorkingDirectory=/var/www/app
ExecStart=/usr/bin/app # Startbefehl
ExecStop=/usr/bin/app stop # Stoppbefehl (optional)
ExecReload=/bin/kill -HUP $MAINPID
Restart=always # always, on-failure, no
RestartSec=5 # Sekunden vor Neustart
Environment="NODE_ENV=production"
EnvironmentFile=/etc/app.env[Install] Sektion
[Install]
WantedBy=multi-user.target # Bei normalem Boot startenService-Typen
| Type | Beschreibung | |------|--------------| | simple | Prozess bleibt im Vordergrund (Standard) | | forking | Prozess forkt sich (klassische Daemons) | | oneshot | Einmalige Ausführung | | notify | Signalisiert Bereitschaft an Systemd |
Logs mit journalctl
Logs eines Services
journalctl -u nginxLive-Logs folgen
journalctl -u nginx -fLogs seit Boot
journalctl -u nginx -bLogs der letzten Stunde
journalctl -u nginx --since "1 hour ago"Logs eines bestimmten Zeitraums
journalctl -u nginx --since "2024-01-26 10:00" --until "2024-01-26 12:00"System-Befehle
Neustart/Herunterfahren
systemctl reboot
systemctl poweroffTargets (Runlevel)
systemctl get-default # Standard-Target
systemctl set-default multi-user.target # Ändern
systemctl isolate rescue.target # In Rescue wechselnTimer (Cron-Alternative)
Systemd-Timer als moderne Cron-Alternative:
Timer-Unit: `/etc/systemd/system/backup.timer`
[Unit]
Description=Tägliches Backup
[Timer]
OnCalendar=daily
Persistent=true
[Install]
WantedBy=timers.targetService-Unit: `/etc/systemd/system/backup.service`
[Unit]
Description=Backup ausführen
[Service]
Type=oneshot
ExecStart=/root/backup.shAktivieren:
systemctl enable --now backup.timer
systemctl list-timersTroubleshooting
Service startet nicht
systemctl status dienst
journalctl -u dienst -n 50Nach Konfigurationsänderung
systemctl daemon-reload
systemctl restart dienstAbhängigkeiten anzeigen
systemctl list-dependencies nginxHäufige Tasks
Nginx neustarten ohne Downtime
systemctl reload nginxMySQL nach Konfigurationsänderung
systemctl restart mysqlAlle Dienste nach Boot prüfen
systemctl --failedFazit
systemctl ist der zentrale Befehl für Service-Verwaltung unter Linux. Die wichtigsten: start, stop, restart, status, enable. Mit journalctl prüfen Sie die Logs. Eigene Services erstellen Sie als Unit-Dateien in /etc/systemd/system/.