5. Prozesse, Dienste und systemd 5.1 Prozesse, Dienste und systemd Linux führt Programme als Prozesse aus. Ein Prozess ist ein laufendes Programm. Ein Dienst ist ein Programm, das meist im Hintergrund läuft und eine bestimmte Aufgabe für das System oder Netzwerk bereitstellt. Für Fachinformatiker Systemintegration ist dieses Thema wichtig, weil Serverdienste wie SSH, Webserver, Datenbanken, DNS, DHCP, Backupdienste oder Monitoring-Agenten auf Linux-Systemen als Prozesse und Dienste laufen. Merksatz: Prozess = laufendes Programm. Dienst = Hintergrundprogramm mit Aufgabe. Lernziele Nach dieser Seite solltest du erklären können: - was ein Prozess ist - was eine PID ist - was ein Dienst ist - was ein Daemon ist - wie man Prozesse anzeigt - wie man Prozesse beendet - wie man Systemressourcen prüft - wie Dienste mit systemd verwaltet werden - was systemctl macht - was enable und disable bedeuten - wie man typische Dienstfehler eingrenzt Grundidee Wenn unter Linux ein Programm gestartet wird, entsteht daraus ein Prozess. Beispiele: - Shell - Texteditor - Webserver - Datenbankserver - Backupskript - SSH-Server - Cronjob - Monitoring-Agent Jeder Prozess verbraucht Ressourcen, zum Beispiel: - CPU - Arbeitsspeicher - Dateizugriffe - Netzwerkverbindungen - Prozess-IDs - offene Dateien Merksatz: Alles, was läuft, ist als Prozess im System sichtbar. Prozess Ein Prozess ist eine laufende Instanz eines Programms. Beispiel: Das Programm nginx ist installiert. Wenn nginx gestartet wird, laufen ein oder mehrere nginx-Prozesse. Ein Programm kann mehrfach als Prozess laufen. Beispiele: mehrere Shells mehrere Webserver-Worker mehrere Datenbankprozesse mehrere SSH-Sitzungen Merksatz: Programm = Datei auf dem System. Prozess = laufendes Programm. PID PID steht für: Process ID Die PID ist eine eindeutige Nummer eines laufenden Prozesses. Beispiel: PID 1234 Mit der PID kann ein Prozess gezielt angesprochen werden, zum Beispiel zum Beenden oder Prüfen. Merksatz: PID = eindeutige Nummer eines Prozesses. PPID PPID steht für: Parent Process ID Das ist die Prozess-ID des Elternprozesses. Viele Prozesse werden von anderen Prozessen gestartet. Beispiel: Eine Shell startet ein Skript. Die Shell ist der Elternprozess. Das Skript ist der Kindprozess. Merksatz: Prozesse können Eltern- und Kindprozesse haben. Prozesse anzeigen mit ps Der Befehl ps zeigt Prozesse an. Beispiele: ps ps aux ps -ef Bedeutung: Befehl Bedeutung ps Prozesse der aktuellen Shell anzeigen ps aux viele Prozesse systemweit anzeigen ps -ef Prozesse in anderem verbreiteten Format anzeigen Typische Spalten: Spalte Bedeutung USER Benutzer, unter dem der Prozess läuft PID Prozess-ID %CPU CPU-Nutzung %MEM Speicheranteil COMMAND gestarteter Befehl PPID Elternprozess-ID Merksatz: ps zeigt laufende Prozesse. Prozesse suchen Prozesse kann man mit ps und grep suchen. Beispiel: ps aux | grep nginx Bedeutung: ps aux zeigt Prozesse. grep nginx filtert nach nginx. Alternative Befehle: pgrep nginx pidof nginx Bedeutung: Befehl Bedeutung pgrep nginx sucht Prozess-IDs nach Namen pidof nginx zeigt PID eines laufenden Programms Merksatz: ps zeigt, grep filtert. Prozesse live überwachen mit top top zeigt laufende Prozesse und Systemauslastung live an. Starten: top Typische Informationen: CPU-Auslastung RAM-Nutzung laufende Prozesse Load Average Prozessliste Benutzer Prozess-IDs Beenden: q Merksatz: top zeigt Systemlast live. htop htop ist eine komfortablere Alternative zu top. Starten: htop Vorteile: übersichtlicher farbliche Anzeige einfachere Prozessauswahl leichteres Beenden von Prozessen Wichtig: htop ist nicht immer standardmäßig installiert. Merksatz: htop ist ein komfortabler Prozessmonitor, falls installiert. CPU, RAM und Load Average Bei Prozessproblemen sind drei Werte besonders wichtig: Wert Bedeutung CPU Rechenleistung RAM Arbeitsspeicher Load Average durchschnittliche Systemlast Hohe CPU-Auslastung kann bedeuten: Prozess rechnet stark Endlosschleife hohe Nutzerlast Angriff oder Fehlkonfiguration Hohe RAM-Nutzung kann bedeuten: Dienst benötigt viel Speicher Speicherleck zu viele Prozesse falsche Konfiguration Merksatz: Langsame Systeme immer mit Messwerten prüfen. Load Average einfach erklärt Load Average zeigt, wie viele Prozesse im Durchschnitt auf CPU oder I/O warten. Typische Anzeige: load average: 0.50, 1.20, 2.10 Die drei Werte stehen für: letzte 1 Minute letzte 5 Minuten letzte 15 Minuten Ein hoher Wert kann auf Überlastung hindeuten. Wichtig: Bewertung hängt von der Anzahl der CPU-Kerne ab. Merksatz: Load Average zeigt durchschnittliche Systemlast. Prozesse beenden mit kill Mit kill sendet man ein Signal an einen Prozess. Beispiel: kill 1234 Das sendet standardmäßig ein TERM-Signal. TERM bedeutet: Prozess soll sauber beendet werden. Wenn das nicht funktioniert: kill -9 1234 Das sendet ein KILL-Signal. Wichtig: kill -9 beendet hart und sollte nur verwendet werden, wenn normales Beenden nicht funktioniert. Merksatz: Erst normal beenden, dann nur notfalls kill -9. Wichtige Signale Signal Nummer Bedeutung TERM 15 sauber beenden KILL 9 sofort hart beenden HUP 1 häufig Konfiguration neu laden INT 2 Unterbrechung, ähnlich Strg+C Beispiele: kill -15 1234 kill -9 1234 kill -HUP 1234 Merksatz: TERM bittet um Beenden. KILL erzwingt Beenden. Prozess mit Namen beenden Mit pkill kann man Prozesse anhand des Namens beenden. Beispiel: pkill nginx Wichtig: Vorsichtig verwenden, weil mehrere Prozesse betroffen sein können. Besser vorher prüfen: pgrep -a nginx Merksatz: pkill beendet nach Namen, deshalb vorher genau prüfen. Prozesse im Vordergrund und Hintergrund Ein Prozess kann im Vordergrund oder Hintergrund laufen. Vordergrund: blockiert die aktuelle Shell, bis er beendet ist. Hintergrund: läuft weiter, während man die Shell weiter nutzen kann. Befehl im Hintergrund starten: befehl & Beispiel: sleep 60 & Jobs anzeigen: jobs Merksatz: & startet einen Befehl im Hintergrund. Strg+C und Strg+Z Wichtige Tastenkombinationen: Tastenkombination Bedeutung Strg+C laufenden Vordergrundprozess abbrechen Strg+Z Prozess anhalten fg angehaltenen Job in Vordergrund holen bg angehaltenen Job im Hintergrund fortsetzen Merksatz: Strg+C beendet meist. Strg+Z hält an. Daemon Ein Daemon ist ein Hintergrundprozess, der dauerhaft oder bei Bedarf eine Systemaufgabe erfüllt. Typische Daemons: sshd cron nginx mysqld systemd rsyslogd Viele Daemon-Namen enden auf: d Beispiele: sshd = SSH-Daemon cron oder crond = Cron-Daemon Merksatz: Daemon = Hintergrunddienst. Dienst Ein Dienst ist eine Systemfunktion, die meist im Hintergrund bereitgestellt wird. Beispiele: Dienst Zweck ssh Fernadministration nginx Webserver apache2 Webserver mariadb Datenbank postgresql Datenbank cron zeitgesteuerte Aufgaben systemd-journald Logging docker Containerdienst Merksatz: Dienste stellen Funktionen bereit. systemd systemd ist auf vielen modernen Linux-Distributionen das zentrale Init- und Dienstverwaltungssystem. systemd ist zuständig für: - Systemstart - Dienste - Abhängigkeiten - Units - Logging-Anbindung - Timer - Mounts - Targets - Systemzustände Wichtig: Nicht jede Linux-Distribution nutzt systemd. Viele Serverdistributionen tun es aber. Merksatz: systemd verwaltet auf vielen Linux-Systemen Dienste und Systemstart. Unit Eine Unit ist eine Verwaltungseinheit von systemd. Typische Unit-Arten: Unit-Art Bedeutung .service Dienst .socket Socket-Aktivierung .timer zeitgesteuerte Aufgabe .mount Mountpoint .target Zielzustand des Systems Beispiel: ssh.service nginx.service docker.service Merksatz: .service steht für einen Dienst. systemctl systemctl ist das wichtigste Werkzeug zur Verwaltung von systemd. Typische Befehle: systemctl status ssh systemctl start ssh systemctl stop ssh systemctl restart ssh systemctl reload ssh systemctl enable ssh systemctl disable ssh Merksatz: systemctl verwaltet systemd-Units. Dienststatus prüfen Status eines Dienstes prüfen: systemctl status ssh Typische Informationen: Dienstname aktiv oder inaktiv Fehlerstatus PID Startzeit letzte Logzeilen Pfad zur Unit-Datei Wichtige Zustände: Zustand Bedeutung active Dienst läuft inactive Dienst läuft nicht failed Dienst ist fehlgeschlagen enabled startet automatisch beim Boot disabled startet nicht automatisch beim Boot Merksatz: systemctl status ist die erste Prüfung bei Dienstproblemen. Dienst starten Dienst starten: systemctl start ssh Bedeutung: Der Dienst wird jetzt gestartet. Wichtig: start bedeutet nicht automatisch, dass der Dienst beim nächsten Neustart wieder startet. Merksatz: start startet jetzt. Dienst stoppen Dienst stoppen: systemctl stop ssh Bedeutung: Der Dienst wird jetzt gestoppt. Wichtig: stop deaktiviert nicht automatisch den Autostart. Merksatz: stop stoppt jetzt. Dienst neu starten Dienst neu starten: systemctl restart ssh Bedeutung: Der Dienst wird gestoppt und neu gestartet. Typische Nutzung: nach Konfigurationsänderungen nach Fehlern nach Updates Wichtig: Bei SSH vorsichtig sein, besonders wenn man gerade per SSH verbunden ist. Merksatz: restart startet Dienst komplett neu. Dienst neu laden Dienst neu laden: systemctl reload nginx Bedeutung: Der Dienst lädt seine Konfiguration neu, ohne vollständig beendet zu werden. Nicht jeder Dienst unterstützt reload. Unterschied: Befehl Bedeutung restart Dienst komplett neu starten reload Konfiguration neu laden, falls unterstützt Merksatz: reload ist oft schonender als restart, wenn der Dienst es unterstützt. Autostart aktivieren Dienst beim Systemstart automatisch starten: systemctl enable ssh Wichtig: enable startet den Dienst nicht unbedingt sofort. Dafür braucht man: systemctl start ssh Oder kombiniert: systemctl enable --now ssh Merksatz: enable aktiviert Autostart. Autostart deaktivieren Autostart deaktivieren: systemctl disable ssh Wichtig: disable stoppt den aktuell laufenden Dienst nicht unbedingt sofort. Dafür braucht man: systemctl stop ssh Merksatz: disable entfernt Autostart. enable, disable, start und stop unterscheiden Befehl Wirkung start startet Dienst jetzt stop stoppt Dienst jetzt enable startet Dienst künftig automatisch beim Boot disable startet Dienst künftig nicht automatisch beim Boot restart stoppt und startet Dienst jetzt neu reload lädt Konfiguration neu, falls unterstützt Merksatz: start und stop gelten jetzt. enable und disable gelten für den Systemstart. Dienst prüfen nach Änderung Nach Änderung an einem Dienst: systemctl restart dienstname systemctl status dienstname journalctl -u dienstname Typisches Vorgehen: 1. Konfiguration ändern 2. Syntax prüfen, falls möglich 3. Dienst neu laden oder neu starten 4. Status prüfen 5. Logs prüfen Merksatz: Nach Dienständerung immer Status und Logs prüfen. journalctl für Dienste Logs eines Dienstes anzeigen: journalctl -u ssh Live mitlesen: journalctl -u ssh -f Seit letztem Boot: journalctl -u ssh -b Nur letzte Einträge: journalctl -u ssh -n 50 Merksatz: journalctl -u zeigt Logs einer Unit. Dienst läuft, aber Port ist nicht erreichbar Mögliche Ursachen: Dienst lauscht nicht auf erwarteter Adresse Dienst lauscht auf anderem Port lokale Firewall blockiert Netzwerkfirewall blockiert Dienst ist nur lokal gebunden falsche Konfiguration IPv4/IPv6-Verwechslung Prüfen: systemctl status dienst ss -tulpen journalctl -u dienst Firewall-Regeln Merksatz: Dienst läuft heißt nicht automatisch: Port ist erreichbar. Offene Ports anzeigen Mit ss kann man offene Ports und Verbindungen anzeigen. Beispiele: ss -tulpen ss -tulpn Bedeutung der Optionen: Option Bedeutung -t TCP -u UDP -l listening -p Prozess anzeigen -e erweiterte Informationen -n numerische Anzeige Merksatz: ss zeigt, welche Dienste auf welchen Ports lauschen. Dienst lauscht nur auf localhost Wenn ein Dienst nur auf 127.0.0.1 lauscht, ist er nur lokal erreichbar. Beispiel: 127.0.0.1:8080 Bedeutung: Nur Programme auf demselben System können direkt darauf zugreifen. Wenn ein Dienst auf allen IPv4-Schnittstellen lauscht: 0.0.0.0:8080 Bedeutung: Dienst lauscht auf allen IPv4-Interfaces. Merksatz: 127.0.0.1 = nur lokal. 0.0.0.0 = alle IPv4-Interfaces. Dienst startet nicht Wenn ein Dienst nicht startet, sollte man prüfen: systemctl status dienst journalctl -u dienst Konfigurationsdatei Syntaxprüfung Ports bereits belegt? Rechte auf Dateien Abhängigkeiten Speicherplatz Benutzer des Dienstes Pfade Zertifikate Merksatz: Dienstfehler immer mit Status und Logs eingrenzen. Port bereits belegt Ein Dienst kann nicht starten, wenn ein anderer Prozess denselben Port bereits nutzt. Beispiel: nginx soll TCP 80 nutzen, aber Apache läuft bereits auf TCP 80. Prüfen: ss -tulpen Lösung: einen Dienst stoppen Port ändern Konfiguration anpassen Merksatz: Ein Port kann pro IP und Protokoll nur passend gebunden werden. Dienst hat Rechteproblem Ein Dienst läuft oft unter einem eigenen Benutzer. Beispiel: www-data nginx postgres Wenn dieser Benutzer keine Rechte auf Dateien oder Verzeichnisse hat, kann der Dienst fehlschlagen. Prüfen: systemctl status dienst journalctl -u dienst ls -l datei ls -ld verzeichnis Merksatz: Dienstprobleme können Rechteprobleme sein. Dienst hat Konfigurationsfehler Viele Dienste starten nicht, wenn die Konfiguration fehlerhaft ist. Beispiele: falsche Syntax falscher Pfad falscher Port Zertifikat fehlt Benutzer existiert nicht ungültige Option Viele Dienste bieten Syntaxprüfungen. Beispiele: nginx -t apachectl configtest Wichtig: Vor restart möglichst Syntax prüfen, wenn der Dienst das unterstützt. Merksatz: Konfiguration prüfen, bevor man produktive Dienste neu startet. Abhängigkeiten Dienste können voneinander abhängig sein. Beispiele: Webanwendung braucht Datenbank. Backupdienst braucht Netzwerkshare. Monitoring braucht Netzwerk. Containerdienst braucht Storage. Wenn eine Abhängigkeit fehlt, startet der Dienst eventuell nicht korrekt oder funktioniert nur teilweise. Merksatz: Dienste funktionieren oft nur mit ihren Abhängigkeiten. Dienste beim Boot Beim Systemstart werden Dienste automatisch gestartet, wenn sie aktiviert sind. Prüfen, ob ein Dienst aktiviert ist: systemctl is-enabled ssh Prüfen, ob ein Dienst läuft: systemctl is-active ssh Merksatz: enabled heißt Autostart. active heißt läuft gerade. Targets Targets sind systemd-Zielzustände. Beispiele: Target Bedeutung multi-user.target Mehrbenutzerbetrieb ohne grafische Oberfläche graphical.target Mehrbenutzerbetrieb mit grafischer Oberfläche rescue.target Rettungsmodus emergency.target Minimaler Notfallmodus Merksatz: Targets beschreiben Systemzustände. Cron und systemd Timer Zeitgesteuerte Aufgaben können unter Linux über cron oder systemd Timer laufen. cron: klassischer Zeitplaner systemd Timer: systemd-eigene zeitgesteuerte Units Beispiele für Aufgaben: Backup starten Logs aufräumen Updates prüfen Skript regelmäßig ausführen Merksatz: Wiederkehrende Aufgaben laufen oft über cron oder systemd Timer. Typische Prozessbefehle Befehl Zweck ps Prozesse anzeigen ps aux viele Prozesse anzeigen pgrep Prozesse nach Namen suchen pidof PID eines Programms anzeigen top Prozesse live überwachen htop komfortabler Prozessmonitor kill Signal an Prozess senden pkill Prozess nach Namen beenden jobs Hintergrundjobs anzeigen fg Job in Vordergrund holen bg Job im Hintergrund fortsetzen Typische Dienstbefehle Befehl Zweck systemctl status dienst Dienststatus prüfen systemctl start dienst Dienst jetzt starten systemctl stop dienst Dienst jetzt stoppen systemctl restart dienst Dienst neu starten systemctl reload dienst Konfiguration neu laden systemctl enable dienst Autostart aktivieren systemctl disable dienst Autostart deaktivieren systemctl enable --now dienst Autostart aktivieren und sofort starten systemctl is-active dienst prüfen, ob Dienst läuft systemctl is-enabled dienst prüfen, ob Autostart aktiv ist journalctl -u dienst Dienstlogs anzeigen Typische Fehlerbilder Fehlerbild Wahrscheinliche Ursache Dienst ist inactive Dienst läuft nicht Dienst ist failed Startfehler oder Absturz Dienst startet nicht Konfiguration, Rechte, Port, Abhängigkeit Dienst läuft, aber nicht erreichbar Firewall, Port, Bind-Adresse, Netzwerk Port bereits belegt anderer Prozess nutzt denselben Port Dienst nach Boot nicht gestartet Autostart nicht enabled Dienst kann Datei nicht lesen Rechteproblem Dienst findet Datei nicht falscher Pfad Dienst bricht nach Änderung ab Konfigurationsfehler System langsam CPU, RAM, I/O oder Prozesslast prüfen Sichere Arbeitsweise bei Dienständerungen Vor Änderung: aktuelle Konfiguration sichern Dokumentation prüfen Wartungsfenster beachten aktive Verbindung berücksichtigen Während Änderung: Syntax prüfen, falls möglich Dienst reload statt restart nutzen, wenn ausreichend Nach Änderung: systemctl status prüfen journalctl -u prüfen Funktion testen Rollback bereithalten Merksatz: Dienständerungen immer prüfbar und rückgängig planbar machen. Typische Prüfungsfragen Frage Kurzantwort Was ist ein Prozess? laufendes Programm Was ist eine PID? eindeutige Prozess-ID Was ist ein Dienst? Hintergrundprogramm mit Aufgabe Was ist ein Daemon? Hintergrundprozess Was macht ps? Prozesse anzeigen Was macht top? Prozesse live überwachen Was macht kill? Signal an Prozess senden Was macht systemctl? systemd-Units verwalten Was bedeutet active? Dienst läuft Was bedeutet inactive? Dienst läuft nicht Was bedeutet failed? Dienst ist fehlgeschlagen Was bedeutet enabled? Autostart aktiv Was bedeutet disabled? Autostart nicht aktiv Was macht journalctl -u? Logs einer Unit anzeigen Typische Prüfungsfallen Falle Richtig denken Programm und Prozess gleichsetzen Programm ist Datei, Prozess läuft kill immer als hartes Beenden verstehen kill sendet Signale, Standard ist TERM kill -9 sofort verwenden erst sauber beenden Dienst läuft = erreichbar Firewall, Port und Bind-Adresse prüfen enable mit start verwechseln enable ist Autostart, start ist jetzt disable mit stop verwechseln disable entfernt Autostart, stop stoppt jetzt Logs nicht prüfen journalctl -u ist zentral reload und restart gleichsetzen reload lädt Konfiguration, restart startet neu SSH unvorsichtig neu starten Remote-Zugriff kann abbrechen Portproblem nur am Dienst suchen auch Firewall und Bind-Adresse prüfen IHK-sichere Kurzformulierung Ein Prozess ist eine laufende Instanz eines Programms und besitzt eine eindeutige Prozess-ID, die PID. Dienste sind Hintergrundprogramme, die System- oder Netzwerkfunktionen bereitstellen, zum Beispiel SSH, Webserver oder Datenbanken. Auf vielen Linux-Systemen werden Dienste mit systemd verwaltet. Das Werkzeug systemctl dient zum Starten, Stoppen, Neustarten, Aktivieren und Prüfen von Diensten. active bedeutet, dass ein Dienst läuft, enabled bedeutet, dass er beim Systemstart automatisch gestartet wird. Bei Dienstproblemen sollten systemctl status, journalctl -u, offene Ports, Rechte, Konfiguration und Abhängigkeiten geprüft werden. Ein laufender Dienst ist nicht automatisch von außen erreichbar, weil Firewall-Regeln, Bind-Adresse und Netzwerkpfade ebenfalls passen müssen. Merksätze Prozess = laufendes Programm. Programm = Datei auf dem System. PID = Prozess-ID. PPID = Elternprozess-ID. Dienst = Hintergrundprogramm mit Aufgabe. Daemon = Hintergrunddienst. ps zeigt Prozesse. top zeigt Prozesse live. htop ist komfortabler, falls installiert. kill sendet Signale. TERM beendet sauber. KILL beendet hart. kill -9 nur im Notfall. systemd verwaltet Dienste und Systemstart. systemctl verwaltet systemd-Units. .service steht für Dienst. status prüft Dienstzustand. start startet jetzt. stop stoppt jetzt. restart startet neu. reload lädt Konfiguration neu. enable aktiviert Autostart. disable deaktiviert Autostart. active heißt: läuft gerade. enabled heißt: startet beim Boot. Dienst läuft heißt nicht automatisch: Port erreichbar. 127.0.0.1 heißt: nur lokal. 0.0.0.0 heißt: alle IPv4-Interfaces. journalctl -u zeigt Dienstlogs. Dienstfehler mit Status, Logs, Ports, Rechten, Konfiguration und Abhängigkeiten prüfen.