Introduction
systemd est le système d'initialisation et le gestionnaire de services utilisé par la majorité des distributions Linux modernes (Debian, Ubuntu, Fedora, Arch, etc.). Il remplacé les anciens systèmes SysVinit et Upstart.
Commandes systemctl essentielles
Controler un service
sudo systemctl start nginx # démarrer un service
sudo systemctl stop nginx # arrêter un service
sudo systemctl restart nginx # redémarrer un service
sudo systemctl reload nginx # recharger la configuration sans couper le serviceActiver ou désactiver au démarrage
sudo systemctl enable nginx # démarrage automatique au boot
sudo systemctl disable nginx # ne pas démarrer au boot
sudo systemctl enable --now nginx # activer et démarrer immédiatementVerifier l'état d'un service
systemctl status nginx
systemctl is-active nginx
systemctl is-enabled nginxLister les services
systemctl list-units --type=service
systemctl list-units --type=service --state=running
systemctl list-unit-files --type=serviceCreer un service personnalisé
Supposons que vous avez une application Node.js a faire tourner en tant que service.
Creer le fichier d'unite
sudo nano /etc/systemd/system/mon-app.serviceContenu du fichier :
[Unit]
Description=Mon application Node.js
After=network.target
[Service]
Type=simple
User=deploy
WorkingDirectory=/opt/mon-app
ExecStart=/usr/bin/node /opt/mon-app/server.js
Restart=on-failure
RestartSec=5
Environment=NODE_ENV=production
[Install]
WantedBy=multi-user.targetActiver et démarrer le service
sudo systemctl daemon-reload
sudo systemctl enable --now mon-app.service
systemctl status mon-app.serviceLes sections d'un fichier d'unite
| Section | Role |
|---|---|
[Unit] | Description et dépendances (After, Requires, Wants) |
[Service] | Type de service, commande de démarrage, utilisateur, redémarrage |
[Install] | Cible dans laquelle le service est active |
Journalctl -- Consulter les journaux
systemd centralise tous les journaux via journald. La commande journalctl permet de les consulter.
Journaux d'un service spécifique
journalctl -u nginx.service
journalctl -u nginx.service -f # suivre en temps reel (comme tail -f)
journalctl -u nginx.service --since todayJournaux du système
journalctl -b # journaux depuis le dernier démarrage
journalctl -b -1 # journaux du démarrage précédént
journalctl --since "2025-01-15 08:00"
journalctl -p err # uniquement les erreursGerer l'espace disque des journaux
journalctl --disk-usage
sudo journalctl --vacuum-size=500M # limiter a 500 Mo
sudo journalctl --vacuum-time=30d # supprimer les journaux de plus de 30 joursLes timers systemd -- Alternative a cron
Les timers systemd offrent une alternative moderne a cron avec une meilleure intégration aux journaux et une gestion fine des dépendances.
Creer un timer
Creez d'abord un service qui exécuté la tache :
# /etc/systemd/system/sauvegarde.service
[Unit]
Description=Sauvegarde quotidienne
[Service]
Type=oneshot
ExecStart=/usr/local/bin/sauvegarde.shPuis le timer associé :
# /etc/systemd/system/sauvegarde.timer
[Unit]
Description=Lancer la sauvegarde tous les jours a 2h
[Timer]
OnCalendar=*-*-* 02:00:00
Persistent=true
[Install]
WantedBy=timers.targetActiver le timer
sudo systemctl daemon-reload
sudo systemctl enable --now sauvegarde.timerLister les timers actifs
systemctl list-timers --allCibles (targets) et niveaux d'exécution
Les cibles systemd remplacent les anciens niveaux d'exécution (runlevels) de SysVinit.
| Ancien runlevel | Cible systemd | Description |
|---|---|---|
| 0 | poweroff.target | Arret du système |
| 1 | rescue.target | Mode de secours (mono-utilisateur) |
| 3 | multi-user.target | Mode multi-utilisateur sans interface graphique |
| 5 | graphical.target | Mode graphique |
| 6 | reboot.target | Redémarrage |
Changer de cible
sudo systemctl isolate multi-user.target # passer en mode texte
sudo systemctl isolate graphical.target # passer en mode graphiqueDefinir la cible par défaut
systemctl get-default
sudo systemctl set-default multi-user.targetConclusion
systemd est au coeur de l'administration Linux moderne. La maitrise de systemctl pour les services, journalctl pour les journaux et les timers pour la planification vous permettra de gérer efficacement n'importe quel serveur Linux.