Le terme daemon vient de la mythologie grecque ancienne, où il désignait un être immatériel influençant le monde des humains.
En informatique, notamment dans les systèmes d’exploitation de type UNIX, un daemon est un processus d’arrière-plan qui s’exécute sans interaction directe de l’utilisateur. Il ne dépend pas d’un terminal ou d’une interface utilisateur et démarre généralement avec le système ou dans des conditions spécifiques.
La fonction principale d’un daemon est de fournir des services spécifiques à d’autres processus ou utilisateurs. Par exemple, un daemon peut écouter sur des ports réseau en attente de connexions, surveiller les événements du système et réagir lorsque certaines conditions sont remplies, gérer les tâches planifiées (comme cron), envoyer des e-mails (sendmail), et bien plus encore.
Sous Windows, l’équivalent le plus proche d’un daemon est un service (Service). La différence réside principalement dans la façon dont ils sont démarrés, enregistrés, gérés et configurés au sein du système d’exploitation. Leur but reste identique : assurer le fonctionnement continu de certaines fonctions ou services en arrière-plan.
Fonctionne en arrière-plan : les utilisateurs ne voient généralement pas l’interface du daemon ; il n’écrit pas sur la sortie standard (ou la redirige vers les journaux) et ne demande aucune entrée clavier.
Autonome : un daemon démarre soit au démarrage du système, lorsqu’il est déclenché par un système d’initialisation (comme systemd), soit manuellement par un utilisateur (via des scripts, cron, etc.).
Longue durée de vie : idéalement, un daemon s’exécute indéfiniment, sauf en cas d’erreur critique ou s’il reçoit un signal d’arrêt explicite.
Isolé : s’exécute généralement sous un compte utilisateur ou groupe séparé afin de minimiser les privilèges, ce qui renforce la sécurité et facilite la gestion.
Journalisation : au lieu d’utiliser les entrées/sorties standards, les daemons enregistrent les informations dans des fichiers journaux ou via le journal du système (journald, syslog, etc.), utile pour le débogage et le diagnostic.
Historiquement, presque toutes les tâches système d’arrière-plan sous Linux sont implémentées en tant que daemons. Le système d’exploitation en comprend des dizaines, chacun responsable d’une fonction spécifique. Voici quelques exemples :
sshd (Secure Shell Daemon) : écoute sur le port 22 (par défaut) et permet aux utilisateurs distants de se connecter via SSH chiffré. Sans sshd, l’accès distant au terminal est pratiquement impossible.
cron : un daemon planificateur de tâches. Il vérifie les entrées du crontab et exécute des scripts ou des commandes selon un horaire défini, comme le nettoyage des journaux, l’envoi de rapports, les vérifications système, etc.
syslogd / rsyslog / journald : daemons de journalisation système qui collectent les messages du noyau, des utilitaires, d’autres daemons et applications, puis les enregistrent dans des fichiers journaux ou dans le journal du système.
NetworkManager or Wicd : daemons qui gèrent la configuration réseau — automatisant les connexions aux réseaux filaires/sans fil, la commutation, la configuration VPN, et plus encore.
Ces daemons démarrent au démarrage du système et sont enregistrés dans le gestionnaire de services (par ex. systemd). Ils fonctionnent jusqu’à l’arrêt ou le redémarrage du système. Les utilisateurs interagissent avec eux indirectement — via des fichiers de configuration, des commandes de terminal (service, systemctl) ou des requêtes réseau (si le daemon fournit une interface HTTP/S, SSH ou autre).
Pour implémenter un daemon, suivez ces étapes :
Créer un processus (fork) : le processus parent appelle fork() et continue l’exécution du code du daemon dans le processus enfant.
Se détacher du terminal de contrôle (setsid) : pour éviter toute interférence de l’utilisateur (fermeture du terminal, par exemple), le daemon appelle setsid() pour démarrer une nouvelle session et en devenir le leader.
Fermer les descripteurs d’entrée/sortie standards : comme le daemon ne doit ni écrire à l’écran ni attendre d’entrée, stdin, stdout et stderr sont fermés ou redirigés vers des fichiers journaux.
Gérer les signaux et la journalisation : pour permettre un arrêt propre ou un rechargement de configuration, le daemon doit gérer les signaux (SIGTERM, SIGHUP, etc.). La journalisation se fait généralement via syslog ou des fichiers.
Boucle principale : après l’initialisation, le daemon entre dans sa boucle principale : attendre les événements, les traiter et recommencer jusqu’à son arrêt.
Voyons comment créer un daemon sous Ubuntu 22.04 à l’aide d’un serveur cloud Hostman.
Créez un fichier nommé mydaemon.c et insérez le code suivant :
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <syslog.h>
int main() {
// Ouvrir syslog
openlog("mydaemon", LOG_PID, LOG_DAEMON);
syslog(LOG_NOTICE, "Daemon started");
// Boucle infinie principale
while (1) {
// Tâches d’arrière-plan : surveillance, gestion de files, etc.
syslog(LOG_NOTICE, "Performing task...");
sleep(60);
}
// Si la boucle est quittée
syslog(LOG_NOTICE, "Daemon stopped");
closelog();
return 0;
}
Mettez d’abord à jour vos paquets :
sudo apt update && sudo apt upgrade
Installez le compilateur GCC s’il n’est pas déjà présent :
sudo apt install gcc
Compilez le daemon :
gcc mydaemon.c -o mydaemon
Déplacez le binaire vers /usr/local/bin/, un emplacement standard pour les utilitaires personnalisés :
mv mydaemon /usr/local/bin/mydaemon
Créez un fichier d’unité nommé mydaemon.service :
sudo nano /etc/systemd/system/mydaemon.service
Insérez le contenu suivant :
[Unit]
Description=My Daemon
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/mydaemon
Restart=on-failure
[Install]
WantedBy=multi-user.target
Explication des champs :
Description : description affichée dans systemctl status.After=network.target : garantit que le daemon démarre après la mise en réseau.Type=simple : le daemon ne crée pas de sous-processus, il s’exécute comme un seul processus.ExecStart : chemin vers l’exécutable du daemon.Restart=on-failure : redémarre automatiquement si le daemon échoue.WantedBy=multi-user.target : lance le service dans l’environnement multi-utilisateurs standard.sudo systemctl daemon-reload # Recharger la configuration systemd
sudo systemctl start mydaemon # Démarrer le daemon
sudo systemctl status mydaemon # Vérifier son état
Si tout fonctionne, l’état affichera active. Pour consulter les journaux :
journalctl -u mydaemon.service -e
Leur rôle est d’écouter sur un port réseau (généralement 80 ou 443), d’accepter les requêtes HTTP/HTTPS, de générer une réponse (page HTML, données JSON, etc.) et de la renvoyer au client. Dans la plupart des cas, un serveur web démarre avec le système et reste actif jusqu’à son arrêt manuel (ex. systemctl stop nginx).
MySQL/MariaDB, PostgreSQL, MongoDB — tous sont des daemons. Ils démarrent avec le système et s’exécutent en arrière-plan, acceptant les requêtes d’applications clientes ou de services web. Ces daemons enregistrent leurs activités, acceptent la configuration via des fichiers et sont gérés avec des utilitaires dédiés (ou systemd).
Le daemon cron vérifie la table de planification (crontab) et exécute des programmes aux moments ou intervalles spécifiés par l’utilisateur. Cela permet d’automatiser les sauvegardes, les mises à jour du système, les vérifications de santé et bien d’autres tâches routinières.
atd est un daemon similaire, mais exécute les tâches une seule fois à un moment précis (contrairement à cron, qui les exécute régulièrement).
sshd (Secure Shell Daemon) offre un accès distant via le protocole SSH. xrdp permet les connexions de bureau à distance via le protocole RDP. Il agit comme un daemon écoutant les connexions réseau sur un port défini.
Dans les systèmes modernes, le rôle du « daemon principal » est rempli par systemd (remplaçant l’ancien système SysV init). systemd est le premier processus lancé après le noyau et gère le démarrage et le contrôle de tous les autres services et processus. Il les lance en parallèle et gère leurs dépendances. En résumé, systemd est lui-même un daemon qui « orchestre » tous les autres dans le système.
Avantages :
Automatisation : les daemons permettent d’automatiser le comportement du système — de la réponse aux requêtes réseau à la planification de tâches — sans intervention humaine.
Isolement : s’exécutant sous des comptes utilisateur/groupe séparés et détachés du terminal, ils renforcent la sécurité en limitant les dégâts potentiels en cas de compromission.
Fonctionnement continu : un daemon peut continuer à fournir des services (comme un serveur web) sans interruption, même si l’utilisateur se déconnecte ou ferme la console.
Gestion centralisée : Linux offre des outils système (ex. systemd, scripts init) pour gérer tous les daemons : démarrage, arrêt, redémarrage et journalisation.
Inconvénients :
Complexité du débogage : les daemons fonctionnant en arrière-plan et n’affichant rien à la console, le débogage nécessite une journalisation complète et des configurations complexes (options de debug, traçage, etc.).
Risques de sécurité : si un daemon s’exécute avec des privilèges élevés (par ex. root), toute vulnérabilité peut compromettre l’ensemble du système. Il est recommandé de les exécuter avec des comptes à privilèges limités.
Gestion des dépendances : certains daemons peuvent échouer s’ils ont besoin d’un accès réseau avant que celui-ci ne soit disponible. Les systèmes init modernes corrigent ce problème, mais les anciens scripts SysV init en souffraient fréquemment.
Consommation de ressources : tout processus permanent consomme des ressources système (mémoire, CPU). Trop de daemons peuvent affecter les performances, surtout sur des systèmes limités.
Les daemons sont essentiels à l’architecture des systèmes d’exploitation Linux, offrant de vastes possibilités d’automatisation et de services en arrière-plan. Ils permettent aux administrateurs de configurer de manière flexible les opérations réseau, les tâches planifiées, la journalisation, la sécurité et bien plus encore.
Écrire son propre daemon nécessite de comprendre les processus, les signaux, les appels système et d’accorder une attention particulière à la journalisation et à la sécurité.
Les systèmes init modernes (notamment systemd) ont simplifié la gestion des daemons et la logique des services, rendant la création de services personnalisés plus structurée et flexible. Toutefois, cela reste un domaine complexe demandant conception soignée, débogage et maintenance continue.
Si vous recherchez une solution fiable, performante et économique pour vos flux de travail, Hostman propose des options d’hébergement VPS Linux, notamment Debian VPS, Ubuntu VPS et VPS CentOS.