Linux Platform

Gerer les services avec systemd

Maitrisez systemctl pour contrôler les services, creez vos propres unites, consultez les journaux avec journalctl et utilisez les timers comme alternative a cron.

systemdsystemctljournalctlservicestimers

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 service

Activer 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édiatement

Verifier l'état d'un service

systemctl status nginx
systemctl is-active nginx
systemctl is-enabled nginx

Lister les services

systemctl list-units --type=service
systemctl list-units --type=service --state=running
systemctl list-unit-files --type=service

Creer 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.service

Contenu 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.target

Activer et démarrer le service

sudo systemctl daemon-reload
sudo systemctl enable --now mon-app.service
systemctl status mon-app.service

Les sections d'un fichier d'unite

SectionRole
[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 today

Journaux 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 erreurs

Gerer 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 jours

Les 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.sh

Puis 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.target

Activer le timer

sudo systemctl daemon-reload
sudo systemctl enable --now sauvegarde.timer

Lister les timers actifs

systemctl list-timers --all

Cibles (targets) et niveaux d'exécution

Les cibles systemd remplacent les anciens niveaux d'exécution (runlevels) de SysVinit.

Ancien runlevelCible systemdDescription
0poweroff.targetArret du système
1rescue.targetMode de secours (mono-utilisateur)
3multi-user.targetMode multi-utilisateur sans interface graphique
5graphical.targetMode graphique
6reboot.targetRedémarrage

Changer de cible

sudo systemctl isolate multi-user.target   # passer en mode texte
sudo systemctl isolate graphical.target    # passer en mode graphique

Definir la cible par défaut

systemctl get-default
sudo systemctl set-default multi-user.target

Conclusion

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.