I Unix, och i andra multitasking-operativsystem för datorer, är en daemon (uttalas /ˈdiːmən/ eller /ˈdeɪmən/) ett datorprogram som körs som en bakgrundsuppgift. Många daemoner har namn som slutar på bokstaven "d": till exempel syslogd, daemon som hanterar systemloggen, httpd, daemon som hanterar webbförfrågningar, eller sshd, som tar hand om inkommande SSH-anslutningar.

 

Vad är en daemon och varför används de?

En daemon är ett program som körs i bakgrunden utan att direkt interagera med en användares terminal. Daemoner tillhandahåller tjänster som nätverksåtkomst, schemaläggning, logghantering och hårdvaruhantering. Genom att köra som bakgrundsprocess kan dessa tjänster vara tillgängliga kontinuerligt, oberoende av enskilda användarsessioner.

Hur fungerar daemoner rent tekniskt?

  • Avkoppling från terminal: En traditionell metod för att göra ett program till en daemon är att dubbel-forka (double-fork) för att bli av med controlling terminal och session. Det gör att processen inte avslutas när användarens session sluter.
  • Arbetskatalog och filmask: En daemon brukar byta arbetskatalog till / och sätta umask för att undvika att hålla kataloger låsta och för att kontrollera skapade filers rättigheter.
  • PID: Daemoner får en processidentifierare (PID). Många skriver sin PID till en fil (PID-fil) så andra verktyg kan stoppa eller signalera processen.
  • Signalhantering: Daemoner reagerar på signaler (t.ex. SIGTERM, SIGHUP) för att avsluta, läsa om konfiguration eller rotera loggar.
  • Loggning: Eftersom de saknar terminal använder daemoner ofta systemlogg (t.ex. syslog) eller egna loggfiler.

Start, stopp och övervakning

Historiskt startades daemoner via init-skript (t.ex. SysV init) eller rc-system. Moderna Linux-distributioner använder ofta systemd, som sköter startsekvenser, beroenden och övervakning av tjänster genom enhetliga enhetsfiler (unit files). Vanliga verktyg för hantering är:

  • systemctl start|stop|restart namn.service (systemd)
  • service namn start|stop (bakåtkompatibelt på många system)
  • rc.d-skript eller /etc/init.d/ på äldre system

Det finns även processövervakare och supervisors som runit, s6, supervisord och monit som kan starta om daemoner automatiskt vid fel och samla loggar.

Exempel på vanliga daemoner

  • sshd – tar emot inkommande SSH-anslutningar.
  • httpd eller nginx – webbservrar.
  • cron – schemalägger uppgifter.
  • syslogd – samlar systemloggar.

Säkerhet och begränsningar

  • Principen om minst privilegium: Daemoner bör köras med så få rättigheter som möjligt. Om möjligt, använd en dedicerad användare/grupp för tjänsten.
  • Isolering: Containrar eller sandboxing (t.ex. SELinux, AppArmor, namespaces) kan begränsa skada vid kompromettering.
  • Uppdateringar: Eftersom daemoner ofta körs länge är det viktigt att hålla dem uppdaterade för att åtgärda sårbarheter.

Skillnad mot Windows-tjänster och macOS

I Windows motsvaras daemoner av services (Windows Services). macOS använder launchd för att hantera system- och användartjänster. Konceptet är liknande – bakgrundsprocesser som erbjuder tjänster – men implementationsdetaljer och verktyg skiljer sig mellan plattformarna.

Att skriva en daemon — bästa praxis

  • Hantera signaler korrekt (SIGTERM för stängning, SIGHUP för att läsa om konfiguration).
  • Undvik fasta sökvägar: Gör konfigurationsvägar konfigurerbara och använd standardiserade loggmekanismer.
  • Init-systemintegration: Skriv en korrekt unit- eller init-skript (systemd unit) så tjänsten kan hanteras av värdsystemet.
  • Styr rättigheter: drop privileges efter bind till portar under 1024, använd chroot eller namespaces vid behov.
  • Hälsokontroller: exponera en status- eller hälsokontrollpunkt så övervakningssystem enkelt kan kontrollera att daemonen fungerar.

Felsökning

  • Kolla loggar (systemlogg eller daemonens egna loggfiler).
  • Använd ps, ss/netstat, och strace/lsof för att inspektera processer och öppna resurser.
  • Med systemd kan journalctl -u namn.service visa loggar för en specifik tjänst.

Sammanfattning

En daemon är en bakgrundsprocess som tillhandahåller systemtjänster i Unix-liknande miljöer. De är designade för att köras kontinuerligt, hanteras av init- eller servicehanterare och följa best practices för säkerhet, loggning och övervakning. Moderna system erbjuder fler verktyg (t.ex. systemd och supervisors) som förenklar hantering och förbättrar tillförlitligheten för daemoner.