Der Begriff Daemon stammt aus der antiken griechischen Mythologie und bezeichnete ein immaterielles Wesen, das die Menschenwelt beeinflusst.
In der Informatik, insbesondere in UNIX-ähnlichen Betriebssystemen, ist ein Daemon ein Hintergrundprozess, der ohne direkte Interaktion durch den Benutzer läuft. Er ist nicht von einem Terminal oder einer Benutzeroberfläche abhängig und startet typischerweise mit dem Systemstart oder unter bestimmten Bedingungen.
Die Hauptaufgabe eines Daemons besteht darin, anderen Prozessen oder Benutzern spezifische Dienste bereitzustellen. Ein Daemon kann beispielsweise auf Netzwerkports auf Verbindungen warten, Systemereignisse überwachen und reagieren, wenn bestimmte Bedingungen erfüllt sind, geplante Aufgaben verwalten (wie cron), E-Mails versenden (sendmail) und vieles mehr.
Unter Windows entspricht ein Dienst (Service) am ehesten einem Daemon. Der Unterschied liegt vor allem darin, wie sie in den Betriebssystemen gestartet, registriert, verwaltet und konfiguriert werden. Ihr Zweck ist jedoch derselbe: den kontinuierlichen Hintergrundbetrieb bestimmter Funktionen oder Dienste sicherzustellen.
Läuft im Hintergrund: Benutzer sehen in der Regel keine Oberfläche des Daemons; er schreibt nicht auf die Standardausgabe (oder leitet sie in Protokolle um) und fordert keine Tastatureingaben an.
Autonom: Ein Daemon startet entweder beim Systemstart, wenn er durch ein Init-System (wie systemd) ausgelöst wird, oder manuell durch den Benutzer (über Skripte, cron usw.).
Langlebig: Idealerweise läuft ein Daemon unbegrenzt, es sei denn, es tritt ein kritischer Fehler auf oder er erhält ein explizites Stoppsignal.
Isoliert: Läuft üblicherweise unter einem separaten Benutzer-/Gruppenkonto mit minimalen Rechten, was Dienste sicherer und einfacher zu verwalten macht.
Protokollierung: Anstatt Standard-Ein-/Ausgabe zu verwenden, schreiben Daemons Informationen in Protokolldateien oder an den System-Logger (journald, syslog usw.), was bei Debugging und Diagnose hilft.
Historisch sind nahezu alle systemweiten Hintergrundaufgaben unter Linux als Daemons implementiert. Das Betriebssystem enthält Dutzende davon, die jeweils für eine bestimmte Funktion verantwortlich sind. Hier einige Beispiele:
sshd (Secure Shell Daemon): Lauscht standardmäßig auf Port 22 und ermöglicht entfernten Nutzern die verschlüsselte SSH-Verbindung. Ohne sshd ist ein entfernter Terminalzugriff nahezu unmöglich.
cron: Ein Daemon für die Aufgabenplanung. Er prüft Crontab-Einträge und führt Skripte oder Befehle nach Zeitplan aus, etwa Protokollbereinigung, Versand von Berichten, Systemprüfungen usw.
syslogd / rsyslog / journald: Systemprotokollierungs-Daemons, die Meldungen vom Kernel, von Utilities, anderen Daemons und Anwendungen sammeln und in Protokolldateien oder dem Journal speichern.
NetworkManager or Wicd: Daemons zur Verwaltung der Netzwerkeinstellungen – sie automatisieren Verbindungen zu kabelgebundenen/wireless Netzwerken, Umschalten, VPN-Konfigurationen und mehr.
Diese Daemons starten beim Systemboot und sind im Systemdienst-Manager (z. B. systemd) registriert. Sie laufen, bis das System heruntergefahren oder neu gestartet wird. Benutzer interagieren indirekt mit ihnen – über Konfigurationsdateien, Terminalbefehle (service, systemctl) oder Netzwerkanfragen (wenn der Daemon HTTP/S, SSH oder eine andere Netzwerkschnittstelle bereitstellt).
So implementieren Sie einen Daemon:
fork() auf und führt den Daemon-Code im Kindprozess weiter aus.Vom steuernden Terminal lösen (setsid): Um Benutzereingriffe zu vermeiden (z. B. Schließen des Terminals), ruft der Daemon setsid() auf, um eine neue Sitzung zu starten und deren Leiter zu werden.
Standard-Ein-/Ausgabe-Deskriptoren schließen: Da der Daemon weder auf den Bildschirm schreiben noch auf Eingaben warten soll, werden stdin, stdout und stderr geschlossen oder in Protokolldateien umgeleitet.
Signale und Protokollierung handhaben: Um einen sauberen Shutdown oder das Neuladen der Konfiguration zu unterstützen, muss der Daemon Signale (SIGTERM, SIGHUP usw.) behandeln. Die Protokollierung erfolgt üblicherweise über syslog oder Dateien.
Hauptschleife: Nach der Initialisierung tritt der Daemon in seine Hauptschleife ein: auf Ereignisse warten, sie behandeln und wiederholen, bis er gestoppt wird.
Sehen wir uns an, wie man unter Ubuntu 22.04 mit einem Hostman-Cloud-Server einen Daemon erstellt.
Erstellen Sie eine Datei namens mydaemon.c und fügen Sie den folgenden Code ein:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <syslog.h>
int main() {
// Syslog öffnen
openlog("mydaemon", LOG_PID, LOG_DAEMON);
syslog(LOG_NOTICE, "Daemon started");
// Haupt-Endlosschleife
while (1) {
// Ihre Hintergrundaufgaben: Monitoring, Queue-Verarbeitung usw.
syslog(LOG_NOTICE, "Performing task...");
sleep(60);
}
// Falls die Schleife jemals verlassen wird
syslog(LOG_NOTICE, "Daemon stopped");
closelog();
return 0;
}
Aktualisieren Sie zunächst Ihre Pakete:
sudo apt update && sudo apt upgrade
Installieren Sie den GCC-Compiler, falls nicht bereits vorhanden:
sudo apt install gcc
Kompilieren Sie den Daemon:
gcc mydaemon.c -o mydaemon
Verschieben Sie die Binärdatei nach /usr/local/bin/, einen Standardort für benutzerdefinierte Utilities:
mv mydaemon /usr/local/bin/mydaemon
Erstellen Sie eine Unit-Datei namens mydaemon.service:
sudo nano /etc/systemd/system/mydaemon.service
Fügen Sie den folgenden Inhalt ein:
[Unit]
Description=My Daemon
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/mydaemon
Restart=on-failure
[Install]
WantedBy=multi-user.target
Erläuterung der Felder:
Description: Beschreibung, die in systemctl status angezeigt wird.After=network.target: Stellt sicher, dass der Daemon startet, nachdem das Netzwerk verfügbar ist.Type=simple: Der Daemon forkt nicht; er läuft als einzelner Prozess.ExecStart: Pfad zur ausführbaren Daemon-Datei.Restart=on-failure: Automatischer Neustart, wenn der Daemon abstürzt.WantedBy=multi-user.target: Sorgt dafür, dass der Dienst in der Standard-Multi-User-Umgebung startet.sudo systemctl daemon-reload # Systemd-Konfiguration neu laden
sudo systemctl start mydaemon # Daemon starten
sudo systemctl status mydaemon # Status prüfen
Wenn alles funktioniert, zeigt der Status active an. Zum Anzeigen der Protokolle:
journalctl -u mydaemon.service -e
Ihre Aufgabe ist es, an einem Netzwerkport (meist 80 oder 443) zu lauschen, HTTP/HTTPS-Anfragen anzunehmen, eine Antwort zu erzeugen (eine HTML-Seite, JSON-Daten usw.) und das Ergebnis an den Client zurückzusenden. In den meisten Fällen startet ein Webserver mit dem System und läuft weiter, bis der Server heruntergefahren oder ein Stoppbefehl ausgeführt wird (z. B. systemctl stop nginx).
MySQL/MariaDB, PostgreSQL, MongoDB – all diese sind ebenfalls Daemons. Sie starten mit dem System und laufen im Hintergrund weiter, wobei sie Anfragen von Client-Anwendungen oder Webdiensten annehmen. Diese Daemons protokollieren Aktivitäten, unterstützen die Konfiguration über Dateien und werden mit speziellen Utilities (oder systemd) verwaltet.
Der cron-Daemon prüft die Zeitplantabelle (Crontab) und führt Programme zu den vom Benutzer angegebenen Zeiten oder Intervallen aus. Dadurch lassen sich Backups, Systemupdates, Gesundheitschecks und viele andere Routineaufgaben automatisieren.
atd ist ein ähnlicher Daemon, führt Aufgaben jedoch nur einmal zu einem bestimmten Zeitpunkt aus (im Gegensatz zu cron, das Aufgaben regelmäßig ausführt).
sshd (Secure Shell Daemon) ermöglicht den Fernzugriff über das SSH-Protokoll. xrdp aktiviert Remote-Desktop-Verbindungen über das RDP-Protokoll. Er fungiert als Daemon, der auf Netzwerkverbindungen an einem angegebenen Port lauscht.
In modernen Systemen wird die Rolle des „Haupt-Daemons“ von systemd erfüllt (als Ersatz für das ältere SysV-Init-System). systemd ist der erste Prozess nach dem Kernelstart und für das Starten und Verwalten aller anderen Dienste und Prozesse verantwortlich. Es startet sie parallel und behandelt ihre Abhängigkeiten. Kurz gesagt: systemd ist selbst ein Daemon, der alle anderen im System „orchestriert“.
Vorteile:
Automatisierung: Daemons ermöglichen die Automatisierung des Systemverhaltens – vom Reagieren auf Netzwerkanfragen bis zur Aufgabenplanung – ohne Benutzereingriff.
Isolation: Das Ausführen unter separaten Benutzer-/Gruppenkonten und das Lösen vom Terminal erhöht die Sicherheit, da potenzielle Schäden im Kompromittierungsfall begrenzt werden.
Dauerhafter Betrieb: Ein Daemon kann Anfragen (wie ein Webserver) ohne Unterbrechung bedienen, selbst wenn sich der Benutzer abmeldet oder die Konsole geschlossen wird.
Verwaltbarkeit: Linux stellt Systemtools (z. B. systemd, Init-Skripte) bereit, um alle Daemons zentral zu verwalten: Starten, Stoppen, Neustarten und Protokollieren.
Nachteile:
Debugging-Komplexität: Da Daemons im Hintergrund laufen und nichts auf der Konsole ausgeben, erfordert das Debugging eine gründliche Protokollierung und komplexere Setups (Debug-Flags, Tracing usw.).
Sicherheitsrisiken: Wenn ein Daemon mit erhöhten Rechten (z. B. als root) läuft, kann jede Schwachstelle potenziell das gesamte System kompromittieren. Es ist am besten, Daemons unter eingeschränkten Konten auszuführen.
Abhängigkeitsverwaltung: Manche Daemons können fehlschlagen, wenn sie beispielsweise Netzwerkzugang benötigen, bevor das Netzwerk verfügbar ist. Moderne Init-Systeme lösen dies, aber mit klassischen SysV-Init-Skripten war dies früher ein häufiges Problem.
Erhöhter Ressourcenverbrauch: Jeder ständig laufende Hintergrundprozess verbraucht Systemressourcen (Speicher, CPU-Zeit). Wenn es zu viele Daemons gibt, kann dies die Leistung beeinträchtigen, insbesondere auf Systemen mit begrenzten Ressourcen.
Daemons sind ein zentrales Element der Architektur von Linux-Betriebssystemen und bieten umfangreiche Möglichkeiten für Automatisierung und Hintergrunddienste. Sie ermöglichen Administratoren, Netzwerkbetrieb, Zeitpläne, Protokollierung, Sicherheitssysteme und viele andere Komponenten flexibel zu konfigurieren.
Das Schreiben eines eigenen Daemons erfordert ein Verständnis von Prozessen, Signalen, Systemaufrufen sowie sorgfältige Aufmerksamkeit für Protokollierung und Sicherheit.
Moderne Init-Systeme (insbesondere systemd) haben die Verwaltung von Daemons und die Servicelogik vereinfacht, wodurch die Erstellung benutzerdefinierter Dienste strukturierter und flexibler geworden ist. Es bleibt jedoch ein komplexes Gebiet, das sorgfältige Planung, Debugging und kontinuierliche Wartung verlangt.
Wenn Sie eine zuverlässige, leistungsstarke und budgetfreundliche Lösung für Ihre Workflows suchen, bietet Hostman Ihnen Linux-VPS-Hosting-Optionen, darunter Debian-VPS, Ubuntu-VPS und VPS-CentOS.