👻 Die unsichtbaren Helfer unter Linux: Daemons und Units

Beim Betrieb eines Linux-Systems sind unzählige 'Daemons' im Hintergrund aktiv. Wir verwalten sie mit dem Tool systemd. Doch welche Beziehung besteht zwischen diesen beiden, und warum tragen sie solch einzigartige Namen? So wie jede Codezeile eine Philosophie in sich trägt, verbirgt sich auch in der Struktur eines Linux-Systems eine klare Designabsicht.

linux_daemon_and_systemd_concept
Bild: systemd weist verschiedenen Daemons Arbeitsaufgaben zu

1. Warum 'Daemon'? Die unsichtbare, intelligente Entität

Der Name 'Daemon' stammt aus der griechischen Mythologie, wo 'Daemons' unsichtbare Schutzgeister waren, die zwischen Göttern und Menschen halfen. Nach der Hypothese von 'Maxwells Dämon', die vom Physiker Maxwell vorgeschlagen wurde, gaben Entwickler des MIT im Jahr 1963 Programmen diesen Namen, die „ohne Benutzereingriff im Hintergrund selbstständig Entscheidungen treffen und arbeiten“.

  • Wesen: Ein Daemon interagiert nicht direkt mit dem Benutzer. Er verbleibt im Speicher, selbst wenn das Terminal geschlossen wird, und wartet auf Netzwerkanfragen oder überwacht den Systemstatus – er ist ein 'Hintergrundprozess' im eigentlichen Sinne.

2. Ist systemd selbst ein Daemon? Der „Master-Daemon zur Verwaltung anderer Daemons“

Ja, genau. Das 'd' am Ende des Namens ist der Beweis. systemd ist der Prozess Nummer 1 (PID 1), der als Erster nach dem Booten des Linux-Kernels gestartet wird, und der 'Master-Daemon', der alle anderen Daemons orchestriert und verwaltet.

Zuvor war die Verwaltung von Daemons unter Linux uneinheitlich und chaotisch. systemd wurde eingeführt, um diese Unordnung zu beseitigen und alle Systemelemente in einem standardisierten Format zu verwalten. Das hierbei eingeführte Standardformat ist die 'Unit'.

3. Die Unit: Eine „Standard-Arbeitsanweisung“ für Daemons

Ist ein Daemon die 'Entität', die die eigentliche Arbeit verrichtet, so ist die Unit die 'Arbeitsanweisung', die festlegt, wie diese Entität zu handhaben ist. Der Master-Daemon systemd liest diese von uns erstellte Anweisung (Unit) und startet oder stoppt jeden Daemon entsprechend ihres Inhalts.

  • Klarheit der Absicht: Gäbe es das Unit-Format nicht, hätten Entwickler ihre Daemon-Startcodes alle unterschiedlich geschrieben. Dank der Standardanweisung einer Unit (z.B. einer .service-Datei) können wir jedoch sehr präzise und robust definieren, „in welcher Umgebung, in welcher Reihenfolge und wie im Problemfall neu gestartet werden soll“.
  • Flexible Erweiterbarkeit: Units sind nicht nur für Daemons (Services) gedacht. Sie verwalten alle Elemente von Linux – wie 'Timer' zum Ausführen von Aufgaben zu bestimmten Zeiten oder 'Mounts' zum Einhängen von Geräten – im selben 'Arbeitsanweisungs'-Format. Dadurch lässt sich das gesamte System mit einer einzigen, konsistenten Logik erweitern.

4. Die Beziehung auf einen Blick

Kategorie Daemon systemd-Unit
Identität Der tatsächlich im Speicher laufende Prozess Die Spezifikationsdatei, die Systemkonfigurationen festhält
Rolle Ausführung der eigentlichen Funktion im Hintergrund Definition der Startbedingungen und des Verhaltens von Daemons
Analogie Der Arbeiter, der still im Hintergrund seine Aufgabe erfüllt Die Arbeitsanweisung, der der Arbeiter folgt

Zusammenfassend lässt sich sagen:
Der Master-Daemon systemd liest die Units (Arbeitsanweisungen) und steuert so, dass zahlreiche Daemons (Arbeiter) präzise nach den festgelegten Regeln agieren.

5. Die vielfältige Natur der „Arbeiter“: Daemons und Service-Units richtig unterscheiden

Wenn wir davon sprechen, einen „Service zu starten“, ist die Form des tatsächlich im Hintergrund agierenden Arbeiters (Daemon) nicht nur eine einzige. Denn unabhängig von der verwendeten Sprache oder der spezifischen Implementierung kann alles, was im Hintergrund läuft, ein Daemon sein.

Verschiedene Formen von Arbeitern:

  • Skript-Daemon: Wenn selbstgeschriebener Python-Code wie Django oder FastAPI als Unit registriert wird, wird er zu einem Python-Daemon, der über den Interpreter python3 läuft.

  • Binär-Daemon: Programme wie Nginx oder sshd, die in C oder Go vorkompiliert wurden, sind Daemons in Form von ausführbaren Dateien.

  • Shell-Skript-Daemon: Selbst eine einfache .sh-Datei, die in einer Endlosschleife im Hintergrund läuft, ist ein hervorragender Arbeiter (Daemon).

Die Service-Unit ist das 'Bindeglied':

Genau genommen sind sshd oder Ihr Python-Skript selbst kein 'Service'. Sie sind lediglich Daemons (Arbeiter). Die .service-Datei (Unit), die wir manuell im Verzeichnis /etc/systemd/system/ erstellen oder die bei der Installation eines Pakets automatisch registriert wird, ist die Arbeitsanweisung, die diesen Arbeiter als offizielles Systemelement registriert.

Fazit

Ein Daemon bezeichnet den Zustand eines „im Hintergrund arbeitenden Programms“, während eine Service-Unit die standardisierte Spezifikation ist, die es systemd als Master ermöglicht, diesen Daemon zu steuern. Dank dieser Anweisung kann systemd Befehle auf die gleiche Weise erteilen, unabhängig davon, ob der Arbeiter ein Python-Skript oder eine Binärdatei ist.

Wie finden Sie es? Ich nutze Linux seit etwa 4 bis 5 Jahren als Hauptsystem, und obwohl ich dachte, die Konzepte verstanden zu haben, fiel es mir sehr schwer, sie jemandem zu erklären. Wahrscheinlich dachte ich, ich wüsste es, hatte es aber noch nicht vollständig durchdrungen. Erst jetzt, da ich es endlich in meinen eigenen Worten definiert und zusammengefasst habe, fühle ich mich, als wäre mein Kopf klarer geworden.

Das Schreiben macht wirklich Spaß. Auch wenn es Zeit kostet, hilft es, die Gedanken zu ordnen.