Gérer les services avec systemd sur Linux (Ubuntu, Debian, AlmaLinux)

Tutoriels Linux › Administration

Documentation / Tutoriels Linux / Administration / Gérer les services avec systemd sur Linux (Ubuntu, Debian, AlmaLinux)
Mis à jour le 08/10/2026
629 vues
Débutant
20 minutes

Prérequis

Votre serveur :

systemd démarre le système et fait vivre les services : il les lance au démarrage, les surveille, les relance et garde leur journal. Ce guide montre les commandes du quotidien sur un service existant, puis crée un service de A à Z (un script qui tourne en permanence), lit son journal, le fait revenir tout seul après un plantage, ajoute une tâche planifiée (une sauvegarde de /etc chaque nuit) et provoque deux pannes classiques pour apprendre à les lire. Alpine n'utilise pas systemd mais OpenRC : chaque étape montre son équivalent. Choisissez votre système ci-dessus. Copiez la commande avec le bouton Copier, collez-la dans votre terminal, et comparez avec le résultat attendu.

1Mettre à jour le système

Mettre à jour le système
apt update && apt upgrade -y
Résultat attendu
...
212 upgraded, 8 newly installed, 0 to remove and 4 not upgraded.
(les nombres dépendent de l'âge de l'image)
Mettre à jour le système
dnf upgrade -y
Résultat attendu
...
Complete!
Mettre à jour le système
dnf upgrade -y
Résultat attendu
...
Complete!
Mettre à jour le système, puis redémarrer
apk update && apk upgrade && reboot
Résultat attendu
...
OK: 158 MiB in 209 packages
(les nombres dépendent de l'image ; la connexion SSH se coupe au redémarrage)

Alpine redémarre après la mise à jour : quand elle remplace le noyau, les modules du noyau en cours disparaissent, et le système ne peut plus en charger aucun avant de redémarrer sur le nouveau. Reconnectez-vous en SSH après une minute.

Mettre à jour le système
zypper -n refresh && zypper -n update
Résultat attendu
All repositories have been refreshed.
...

2Voir l'état des services

Tout passe par systemctl (rc-service et rc-status sur Alpine). Premier réflexe devant un serveur : l'état du service SSH, celui par lequel vous êtes entré.

État du service SSH
systemctl status ssh
Résultat attendu
● ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/usr/lib/systemd/system/ssh.service; enabled; preset: enabled)
     Active: active (running) since Thu 2026-09-17 18:17:18 UTC; 17s ago
   Main PID: 7997 (sshd)
...
(Debian 13 ; sur Ubuntu 24.04, sshd est lancé à la demande par ssh.socket : ssh.service s'affiche « inactive (dead) » avec « TriggeredBy: ● ssh.socket », et SSH répond quand même)
État du service SSH
systemctl status sshd
Résultat attendu
● sshd.service - OpenSSH server daemon
     Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; preset: enabled)
     Active: active (running) since Thu 2026-09-17 18:20:38 UTC; 1min 11s ago
...
   Main PID: 41613 (sshd)
...
État du service SSH
systemctl status sshd
Résultat attendu
● sshd.service - OpenSSH server daemon
     Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; preset: enabled)
...
     Active: active (running) since Thu 2026-09-17 18:18:58 UTC; 3s ago
...
État du service SSH
rc-service sshd status
Résultat attendu
 * status: started
État du service SSH
systemctl status sshd
Résultat attendu
● sshd.service - OpenSSH Daemon
     Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; preset: disabled)
     Active: active (running) since Thu 2026-09-17 21:20:00 EEST; 4s ago
...
   Main PID: 17535 (sshd)
...

Trois lignes comptent : Loaded (le fichier du service et s'il est activé au démarrage : enabled ou disabled), Active (en marche : active (running), arrêté : inactive (dead), en échec : failed) et Main PID (le processus). Les dernières lignes du journal suivent.

Trois lignes comptent : Loaded (le fichier du service et s'il est activé au démarrage : enabled ou disabled), Active (en marche : active (running), arrêté : inactive (dead), en échec : failed) et Main PID (le processus). Les dernières lignes du journal suivent.

Trois lignes comptent : Loaded (le fichier du service et s'il est activé au démarrage : enabled ou disabled), Active (en marche : active (running), arrêté : inactive (dead), en échec : failed) et Main PID (le processus). Les dernières lignes du journal suivent.

Trois lignes comptent : Loaded (le fichier du service et s'il est activé au démarrage : enabled ou disabled), Active (en marche : active (running), arrêté : inactive (dead), en échec : failed) et Main PID (le processus). Les dernières lignes du journal suivent.

rc-service répond started ou stopped. rc-status montre les services de chaque niveau d'exécution (default est celui du démarrage normal) et rc-update ceux qui y sont inscrits.

Les services en marche
systemctl list-units --type=service --state=running
Résultat attendu
  UNIT                        LOAD   ACTIVE SUB     DESCRIPTION
  cron.service                loaded active running Regular background program processing daemon
  dbus.service                loaded active running D-Bus System Message Bus
...
  systemd-journald.service    loaded active running Journal Service
...
20 loaded units listed.
(la liste dépend de ce qui est installé)
Les services en marche
systemctl list-units --type=service --state=running
Résultat attendu
  UNIT                     LOAD   ACTIVE SUB     DESCRIPTION
  auditd.service           loaded active running Security Auditing Service
  chronyd.service          loaded active running NTP client/server
  crond.service            loaded active running Command Scheduler
...
  sshd.service             loaded active running OpenSSH server daemon
...
20 loaded units listed.
(la liste dépend de ce qui est installé)
Les services en marche
systemctl list-units --type=service --state=running
Résultat attendu
  UNIT                     LOAD   ACTIVE SUB     DESCRIPTION
  auditd.service           loaded active running Security Auditing Service
  chronyd.service          loaded active running NTP client/server
...
  sshd.service             loaded active running OpenSSH server daemon
...
20 loaded units listed.
(la liste dépend de ce qui est installé)
Les services en marche, par niveau d'exécution
rc-status
Résultat attendu
Runlevel: default
 networking                                                        [  started  ]
...
 chronyd                                                           [  started  ]
 qemu-guest-agent                                                  [  started  ]
 sshd                                                              [  started  ]
Dynamic Runlevel: hotplugged
Dynamic Runlevel: needed/wanted
 sysfs                                                             [  started  ]
...
Les services en marche
systemctl list-units --type=service --state=running
Résultat attendu
  UNIT                     LOAD   ACTIVE SUB     DESCRIPTION
  chronyd.service          loaded active running NTP client/server
  dbus-broker.service      loaded active running D-Bus System Message Bus
  firewalld.service        loaded active running firewalld - dynamic firewall daemon
...
  sshd.service             loaded active running OpenSSH Daemon
...
18 loaded units listed.
(la liste dépend de ce qui est installé)
Les services en échec
systemctl --failed
Résultat attendu
  UNIT LOAD ACTIVE SUB DESCRIPTION
0 loaded units listed.
(un service en échec s'affiche ici en rouge, avec failed dans les colonnes ACTIVE et SUB)
Les services en échec
systemctl --failed
Résultat attendu
  UNIT           LOAD   ACTIVE SUB    DESCRIPTION
● mcelog.service loaded failed failed Machine Check Exception Logging Daemon
...
1 loaded units listed.
(un service en échec ici n'est pas forcément un problème : certains échouent dans une machine virtuelle, sans conséquence)
Les services en échec
systemctl --failed
Résultat attendu
  UNIT LOAD ACTIVE SUB DESCRIPTION
0 loaded units listed.
(un service en échec s'affiche ici en rouge, avec failed dans les colonnes ACTIVE et SUB)
Les services activés au démarrage (niveau default)
rc-update show default
Résultat attendu
              chronyd | default
         cloud-config | default
          cloud-final | default
           cloud-init | default
  cloud-init-hotplugd | default
           networking | default
     qemu-guest-agent | default
                 sshd | default
Les services en échec
systemctl --failed
Résultat attendu
  UNIT                LOAD   ACTIVE SUB    DESCRIPTION
● audit-rules.service loaded failed failed Load Audit Rules
● klog.service        loaded failed failed Early Kernel Boot Messages
...
2 loaded units listed.
(deux services du démarrage, sans conséquence dans une machine virtuelle)
Les services activés au démarrage
systemctl list-unit-files --type=service --state=enabled
Résultat attendu
UNIT FILE                              STATE   PRESET
apparmor.service                       enabled enabled
...
cron.service                           enabled enabled
...
ufw.service                            enabled enabled
...
45 unit files listed.
(le nombre dépend de ce qui est installé)
Les services activés au démarrage
systemctl list-unit-files --type=service --state=enabled
Résultat attendu
UNIT FILE                         STATE   PRESET
...
sshd.service                      enabled enabled
...
34 unit files listed.
Les services activés au démarrage
systemctl list-unit-files --type=service --state=enabled
Résultat attendu
UNIT FILE                         STATE   PRESET
...
sshd.service                      enabled enabled
...
(le nombre dépend de ce qui est installé)
Les services activés au démarrage
systemctl list-unit-files --type=service --state=enabled
Résultat attendu
UNIT FILE                         STATE   PRESET
...
sshd.service                      enabled enabled
...
(le nombre dépend de ce qui est installé)

3Créer un service

Le service s'appelle sonde : un petit script qui écrit une ligne toutes les 30 secondes, de quoi le voir vivre dans le journal. Il est écrit dans /usr/local/bin, et sa définition dans /etc/systemd/system, le dossier des services que vous créez (ceux des paquets vivent dans /usr/lib/systemd/system).

Le service s'appelle sonde : un petit script qui écrit une ligne toutes les 30 secondes, de quoi le voir vivre dans le journal. Il est écrit dans /usr/local/bin, et sa définition dans /etc/systemd/system, le dossier des services que vous créez (ceux des paquets vivent dans /usr/lib/systemd/system).

Le service s'appelle sonde : un petit script qui écrit une ligne toutes les 30 secondes, de quoi le voir vivre dans le journal. Il est écrit dans /usr/local/bin, et sa définition dans /etc/systemd/system, le dossier des services que vous créez (ceux des paquets vivent dans /usr/lib/systemd/system).

Le service s'appelle sonde : un petit script qui écrit une ligne toutes les 30 secondes, de quoi le voir vivre dans le journal. Il est écrit dans /usr/local/bin, et sa définition dans /etc/systemd/system, le dossier des services que vous créez (ceux des paquets vivent dans /usr/lib/systemd/system).

Le service s'appelle sonde : un petit script qui écrit une ligne toutes les 30 secondes, de quoi le voir vivre dans le journal. Il est écrit dans /usr/local/bin, et son script OpenRC dans /etc/init.d, surveillé par supervise-daemon.

Écrire le script
cat > /usr/local/bin/sonde.sh << 'EOF'
#!/bin/sh
while true; do
    echo "sonde vivante, charge : $(cut -d ' ' -f 1-3 /proc/loadavg)"
    sleep 30
done
EOF
chmod +x /usr/local/bin/sonde.sh
Ubuntu / DebianCréer le service, le relire, l'activer au démarrage et le lancer
cat > /etc/systemd/system/sonde.service << 'EOF'
[Unit]
Description=Sonde de demonstration
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/sonde.sh
Restart=always
RestartSec=5
DynamicUser=yes

[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable --now sonde
Résultat attendu
Created symlink /etc/systemd/system/multi-user.target.wants/sonde.service → /etc/systemd/system/sonde.service.
AlmaLinux / Rocky / CentOSCréer le service, le relire, l'activer au démarrage et le lancer
cat > /etc/systemd/system/sonde.service << 'EOF'
[Unit]
Description=Sonde de demonstration
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/sonde.sh
Restart=always
RestartSec=5
DynamicUser=yes

[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable --now sonde
Résultat attendu
Created symlink /etc/systemd/system/multi-user.target.wants/sonde.service → /etc/systemd/system/sonde.service.
FedoraCréer le service, le relire, l'activer au démarrage et le lancer
cat > /etc/systemd/system/sonde.service << 'EOF'
[Unit]
Description=Sonde de demonstration
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/sonde.sh
Restart=always
RestartSec=5
DynamicUser=yes

[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable --now sonde
Résultat attendu
Created symlink /etc/systemd/system/multi-user.target.wants/sonde.service → /etc/systemd/system/sonde.service.
openSUSECréer le service, le relire, l'activer au démarrage et le lancer
cat > /etc/systemd/system/sonde.service << 'EOF'
[Unit]
Description=Sonde de demonstration
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/sonde.sh
Restart=always
RestartSec=5
DynamicUser=yes

[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable --now sonde
Résultat attendu
Created symlink /etc/systemd/system/multi-user.target.wants/sonde.service → /etc/systemd/system/sonde.service.
AlpineCréer le service, l'ajouter au démarrage et le lancer
cat > /etc/init.d/sonde << 'EOF'
#!/sbin/openrc-run
description="Sonde de demonstration"
command="/usr/local/bin/sonde.sh"
command_user="nobody"
supervisor="supervise-daemon"
output_logger="logger -t sonde"
error_logger="logger -t sonde"

depend() {
    need net
}
EOF
chmod +x /etc/init.d/sonde
rc-update add sonde default
rc-service sonde start
Résultat attendu
 * service sonde added to runlevel default
 * Caching service dependencies ... [ ok ]
 * Starting sonde ... [ ok ]

[Unit] décrit et ordonne : After=network.target, après le réseau. [Service] dit quoi lancer (ExecStart), quoi faire s'il s'arrête (Restart=always, après RestartSec=5 secondes) et sous quel utilisateur : DynamicUser=yes fait créer par systemd un utilisateur jetable, nommé comme le service, sans droits sur le reste de la machine. [Install] dit quand le démarrer : WantedBy=multi-user.target, le démarrage normal. daemon-reload fait relire les fichiers ; enable --now active au démarrage et lance tout de suite.

[Unit] décrit et ordonne : After=network.target, après le réseau. [Service] dit quoi lancer (ExecStart), quoi faire s'il s'arrête (Restart=always, après RestartSec=5 secondes) et sous quel utilisateur : DynamicUser=yes fait créer par systemd un utilisateur jetable, nommé comme le service, sans droits sur le reste de la machine. [Install] dit quand le démarrer : WantedBy=multi-user.target, le démarrage normal. daemon-reload fait relire les fichiers ; enable --now active au démarrage et lance tout de suite.

[Unit] décrit et ordonne : After=network.target, après le réseau. [Service] dit quoi lancer (ExecStart), quoi faire s'il s'arrête (Restart=always, après RestartSec=5 secondes) et sous quel utilisateur : DynamicUser=yes fait créer par systemd un utilisateur jetable, nommé comme le service, sans droits sur le reste de la machine. [Install] dit quand le démarrer : WantedBy=multi-user.target, le démarrage normal. daemon-reload fait relire les fichiers ; enable --now active au démarrage et lance tout de suite.

[Unit] décrit et ordonne : After=network.target, après le réseau. [Service] dit quoi lancer (ExecStart), quoi faire s'il s'arrête (Restart=always, après RestartSec=5 secondes) et sous quel utilisateur : DynamicUser=yes fait créer par systemd un utilisateur jetable, nommé comme le service, sans droits sur le reste de la machine. [Install] dit quand le démarrer : WantedBy=multi-user.target, le démarrage normal. daemon-reload fait relire les fichiers ; enable --now active au démarrage et lance tout de suite.

command est le programme, command_user l'utilisateur qui le fait tourner (nobody, sans droits), supervisor=supervise-daemon le surveillant qui le relance s'il tombe, output_logger et error_logger envoient ce qu'il écrit au journal système (/var/log/messages, étiqueté sonde) et depend() dit d'attendre le réseau. rc-update add l'ajoute au niveau default, celui du démarrage normal.

Vérifier
systemctl status sonde
Résultat attendu
● sonde.service - Sonde de demonstration
     Loaded: loaded (/etc/systemd/system/sonde.service; enabled; preset: enabled)
     Active: active (running) since Thu 2026-09-17 18:26:27 UTC; 2s ago
   Main PID: 29583 (sonde.sh)
      Tasks: 2 (limit: 9480)
     Memory: 616.0K (peak: 744.0K)
        CPU: 6ms
     CGroup: /system.slice/sonde.service
             ├─29583 /bin/sh /usr/local/bin/sonde.sh
             └─29586 sleep 30

Sep 17 18:26:27 serveur systemd[1]:Started sonde.service - Sonde de demonstration.
Sep 17 18:26:27 serveur sonde.sh[29583]: sonde vivante, charge : 0.00 0.11 0.12
Vérifier
systemctl status sonde
Résultat attendu
● sonde.service - Sonde de demonstration
     Loaded: loaded (/etc/systemd/system/sonde.service; enabled; preset: enabled)
     Active: active (running) since Thu 2026-09-17 18:26:27 UTC; 2s ago
   Main PID: 29583 (sonde.sh)
      Tasks: 2 (limit: 9480)
     Memory: 616.0K (peak: 744.0K)
        CPU: 6ms
     CGroup: /system.slice/sonde.service
             ├─29583 /bin/sh /usr/local/bin/sonde.sh
             └─29586 sleep 30

Sep 17 18:26:27 serveur systemd[1]:Started sonde.service - Sonde de demonstration.
Sep 17 18:26:27 serveur sonde.sh[29583]: sonde vivante, charge : 0.00 0.11 0.12
Vérifier
systemctl status sonde
Résultat attendu
● sonde.service - Sonde de demonstration
     Loaded: loaded (/etc/systemd/system/sonde.service; enabled; preset: enabled)
     Active: active (running) since Thu 2026-09-17 18:26:27 UTC; 2s ago
   Main PID: 29583 (sonde.sh)
      Tasks: 2 (limit: 9480)
     Memory: 616.0K (peak: 744.0K)
        CPU: 6ms
     CGroup: /system.slice/sonde.service
             ├─29583 /bin/sh /usr/local/bin/sonde.sh
             └─29586 sleep 30

Sep 17 18:26:27 serveur systemd[1]:Started sonde.service - Sonde de demonstration.
Sep 17 18:26:27 serveur sonde.sh[29583]: sonde vivante, charge : 0.00 0.11 0.12
Vérifier
systemctl status sonde
Résultat attendu
● sonde.service - Sonde de demonstration
     Loaded: loaded (/etc/systemd/system/sonde.service; enabled; preset: enabled)
     Active: active (running) since Thu 2026-09-17 18:26:27 UTC; 2s ago
   Main PID: 29583 (sonde.sh)
      Tasks: 2 (limit: 9480)
     Memory: 616.0K (peak: 744.0K)
        CPU: 6ms
     CGroup: /system.slice/sonde.service
             ├─29583 /bin/sh /usr/local/bin/sonde.sh
             └─29586 sleep 30

Sep 17 18:26:27 serveur systemd[1]:Started sonde.service - Sonde de demonstration.
Sep 17 18:26:27 serveur sonde.sh[29583]: sonde vivante, charge : 0.00 0.11 0.12
Vérifier
rc-service sonde status
Résultat attendu
 * status: started

4Lire le journal

systemd garde tout ce que le service écrit (et tout ce qu'il lui arrive) dans le journal, que journalctl filtre par service, par période ou par gravité.

systemd garde tout ce que le service écrit (et tout ce qu'il lui arrive) dans le journal, que journalctl filtre par service, par période ou par gravité.

systemd garde tout ce que le service écrit (et tout ce qu'il lui arrive) dans le journal, que journalctl filtre par service, par période ou par gravité.

systemd garde tout ce que le service écrit (et tout ce qu'il lui arrive) dans le journal, que journalctl filtre par service, par période ou par gravité.

Le service écrit dans /var/log/messages, avec l'étiquette sonde.

Les 5 dernières lignes du service
journalctl -u sonde -n 5
Résultat attendu
Sep 17 18:26:27 serveur systemd[1]:Started sonde.service - Sonde de demonstration.
Sep 17 18:26:27 serveur sonde.sh[29583]: sonde vivante, charge : 0.00 0.11 0.12
Sep 17 18:26:57 serveur sonde.sh[29583]: sonde vivante, charge : 0.00 0.10 0.12
...
Les 5 dernières lignes du service
journalctl -u sonde -n 5
Résultat attendu
Sep 17 18:26:27 serveur systemd[1]:Started sonde.service - Sonde de demonstration.
Sep 17 18:26:27 serveur sonde.sh[29583]: sonde vivante, charge : 0.00 0.11 0.12
Sep 17 18:26:57 serveur sonde.sh[29583]: sonde vivante, charge : 0.00 0.10 0.12
...
Les 5 dernières lignes du service
journalctl -u sonde -n 5
Résultat attendu
Sep 17 18:26:27 serveur systemd[1]:Started sonde.service - Sonde de demonstration.
Sep 17 18:26:27 serveur sonde.sh[29583]: sonde vivante, charge : 0.00 0.11 0.12
Sep 17 18:26:57 serveur sonde.sh[29583]: sonde vivante, charge : 0.00 0.10 0.12
...
Les 5 dernières lignes du service
journalctl -u sonde -n 5
Résultat attendu
Sep 17 18:26:27 serveur systemd[1]:Started sonde.service - Sonde de demonstration.
Sep 17 18:26:27 serveur sonde.sh[29583]: sonde vivante, charge : 0.00 0.11 0.12
Sep 17 18:26:57 serveur sonde.sh[29583]: sonde vivante, charge : 0.00 0.10 0.12
...
Les dernières lignes du service
grep 'sonde:' /var/log/messages | tail -n 5
Résultat attendu
Sep 17 18:26:34 serveur user.notice sonde: sonde vivante, charge : 0.00 0.00 0.00
Sep 17 18:27:04 serveur user.notice sonde: sonde vivante, charge : 0.00 0.00 0.00
...
Suivre le journal en direct (Ctrl+C pour sortir)
journalctl -u sonde -f
Résultat attendu
Sep 17 18:26:57 serveur sonde.sh[29583]: sonde vivante, charge : 0.00 0.10 0.12
(une nouvelle ligne toutes les 30 secondes)
Suivre le journal en direct (Ctrl+C pour sortir)
journalctl -u sonde -f
Résultat attendu
Sep 17 18:26:57 serveur sonde.sh[29583]: sonde vivante, charge : 0.00 0.10 0.12
(une nouvelle ligne toutes les 30 secondes)
Suivre le journal en direct (Ctrl+C pour sortir)
journalctl -u sonde -f
Résultat attendu
Sep 17 18:26:57 serveur sonde.sh[29583]: sonde vivante, charge : 0.00 0.10 0.12
(une nouvelle ligne toutes les 30 secondes)
Suivre le journal en direct (Ctrl+C pour sortir)
journalctl -u sonde -f
Résultat attendu
Sep 17 18:26:57 serveur sonde.sh[29583]: sonde vivante, charge : 0.00 0.10 0.12
(une nouvelle ligne toutes les 30 secondes)
Suivre le journal en direct (Ctrl+C pour sortir)
tail -f /var/log/messages | grep 'sonde:'
Résultat attendu
Sep 17 18:27:04 serveur user.notice sonde: sonde vivante, charge : 0.00 0.00 0.00
(une nouvelle ligne toutes les 30 secondes)
Les lignes des 5 dernières minutes
journalctl -u sonde --since "5 min ago"
Résultat attendu
Sep 17 18:17:36 serveur systemd[1]:Started sonde.service - Sonde de demonstration.
Sep 17 18:17:36 serveur sonde.sh[10648]: sonde vivante, charge : 0.89 0.48 0.25
Sep 17 18:18:06 serveur sonde.sh[10648]: sonde vivante, charge : 0.54 0.44 0.24
Les lignes des 5 dernières minutes
journalctl -u sonde --since "5 min ago"
Résultat attendu
Sep 17 18:17:36 serveur systemd[1]:Started sonde.service - Sonde de demonstration.
Sep 17 18:17:36 serveur sonde.sh[10648]: sonde vivante, charge : 0.89 0.48 0.25
Sep 17 18:18:06 serveur sonde.sh[10648]: sonde vivante, charge : 0.54 0.44 0.24
Les lignes des 5 dernières minutes
journalctl -u sonde --since "5 min ago"
Résultat attendu
Sep 17 18:17:36 serveur systemd[1]:Started sonde.service - Sonde de demonstration.
Sep 17 18:17:36 serveur sonde.sh[10648]: sonde vivante, charge : 0.89 0.48 0.25
Sep 17 18:18:06 serveur sonde.sh[10648]: sonde vivante, charge : 0.54 0.44 0.24
Les lignes des 5 dernières minutes
journalctl -u sonde --since "5 min ago"
Résultat attendu
Sep 17 18:17:36 serveur systemd[1]:Started sonde.service - Sonde de demonstration.
Sep 17 18:17:36 serveur sonde.sh[10648]: sonde vivante, charge : 0.89 0.48 0.25
Sep 17 18:18:06 serveur sonde.sh[10648]: sonde vivante, charge : 0.54 0.44 0.24
Les erreurs de tout le système depuis le démarrage
journalctl -p err -b
Résultat attendu
Sep 17 18:18:21 serveur systemd-networkd-wait-online[4009]: Timeout occurred while waiting for network connectivity.
Sep 17 18:18:21 serveur systemd[1]:Failed to start systemd-networkd-wait-online.service - Wait for Network to be Configured.
(vos lignes diffèrent : c'est là qu'on regarde quand un service ne répond pas)
Les erreurs de tout le système depuis le démarrage
journalctl -p err -b
Résultat attendu
Sep 17 18:18:21 serveur systemd-networkd-wait-online[4009]: Timeout occurred while waiting for network connectivity.
Sep 17 18:18:21 serveur systemd[1]:Failed to start systemd-networkd-wait-online.service - Wait for Network to be Configured.
(vos lignes diffèrent : c'est là qu'on regarde quand un service ne répond pas)
Les erreurs de tout le système depuis le démarrage
journalctl -p err -b
Résultat attendu
Sep 17 18:18:21 serveur systemd-networkd-wait-online[4009]: Timeout occurred while waiting for network connectivity.
Sep 17 18:18:21 serveur systemd[1]:Failed to start systemd-networkd-wait-online.service - Wait for Network to be Configured.
(vos lignes diffèrent : c'est là qu'on regarde quand un service ne répond pas)
Les erreurs de tout le système depuis le démarrage
journalctl -p err -b
Résultat attendu
Sep 17 18:18:21 serveur systemd-networkd-wait-online[4009]: Timeout occurred while waiting for network connectivity.
Sep 17 18:18:21 serveur systemd[1]:Failed to start systemd-networkd-wait-online.service - Wait for Network to be Configured.
(vos lignes diffèrent : c'est là qu'on regarde quand un service ne répond pas)

5Arrêter, démarrer, désactiver

stop arrête maintenant, disable retire du démarrage : les deux sont indépendants. Un service désactivé continue de tourner jusqu'au prochain redémarrage de la machine, et un service arrêté reviendra au démarrage s'il est toujours activé. is-active et is-enabled répondent en un mot, pratique dans un script.

stop arrête maintenant, disable retire du démarrage : les deux sont indépendants. Un service désactivé continue de tourner jusqu'au prochain redémarrage de la machine, et un service arrêté reviendra au démarrage s'il est toujours activé. is-active et is-enabled répondent en un mot, pratique dans un script.

stop arrête maintenant, disable retire du démarrage : les deux sont indépendants. Un service désactivé continue de tourner jusqu'au prochain redémarrage de la machine, et un service arrêté reviendra au démarrage s'il est toujours activé. is-active et is-enabled répondent en un mot, pratique dans un script.

stop arrête maintenant, disable retire du démarrage : les deux sont indépendants. Un service désactivé continue de tourner jusqu'au prochain redémarrage de la machine, et un service arrêté reviendra au démarrage s'il est toujours activé. is-active et is-enabled répondent en un mot, pratique dans un script.

rc-service stop arrête maintenant, rc-update del retire du démarrage : les deux sont indépendants. Un service retiré du niveau default continue de tourner jusqu'au prochain redémarrage de la machine, et un service arrêté reviendra au démarrage s'il y est toujours inscrit.

Arrêter, puis vérifier
systemctl stop sonde && systemctl is-active sonde
Résultat attendu
inactive
Arrêter, puis vérifier
systemctl stop sonde && systemctl is-active sonde
Résultat attendu
inactive
Arrêter, puis vérifier
systemctl stop sonde && systemctl is-active sonde
Résultat attendu
inactive
Arrêter, puis vérifier
systemctl stop sonde && systemctl is-active sonde
Résultat attendu
inactive
Arrêter, puis vérifier
rc-service sonde stop && rc-service sonde status
Résultat attendu
 * Stopping sonde ... [ ok ]
 * status: stopped
Démarrer, puis vérifier
systemctl start sonde && systemctl is-active sonde
Résultat attendu
active
Démarrer, puis vérifier
systemctl start sonde && systemctl is-active sonde
Résultat attendu
active
Démarrer, puis vérifier
systemctl start sonde && systemctl is-active sonde
Résultat attendu
active
Démarrer, puis vérifier
systemctl start sonde && systemctl is-active sonde
Résultat attendu
active
Démarrer, puis vérifier
rc-service sonde start && rc-service sonde status
Résultat attendu
 * Starting sonde ... [ ok ]
 * status: started
Redémarrer (après un changement du script, par exemple)
systemctl restart sonde
Redémarrer (après un changement du script, par exemple)
systemctl restart sonde
Redémarrer (après un changement du script, par exemple)
systemctl restart sonde
Redémarrer (après un changement du script, par exemple)
systemctl restart sonde
Redémarrer (après un changement du script, par exemple)
rc-service sonde restart
Résultat attendu
 * Stopping sonde ... [ ok ]
 * Starting sonde ... [ ok ]
Retirer du démarrage
systemctl disable sonde && systemctl is-enabled sonde
Résultat attendu
Removed "/etc/systemd/system/multi-user.target.wants/sonde.service".
disabled
Retirer du démarrage
systemctl disable sonde && systemctl is-enabled sonde
Résultat attendu
Removed "/etc/systemd/system/multi-user.target.wants/sonde.service".
disabled
Retirer du démarrage
systemctl disable sonde && systemctl is-enabled sonde
Résultat attendu
Removed "/etc/systemd/system/multi-user.target.wants/sonde.service".
disabled
Retirer du démarrage
systemctl disable sonde && systemctl is-enabled sonde
Résultat attendu
Removed "/etc/systemd/system/multi-user.target.wants/sonde.service".
disabled
Retirer du démarrage
rc-update del sonde
Résultat attendu
 * service sonde deleted from runlevel default
Remettre au démarrage
systemctl enable sonde && systemctl is-enabled sonde
Résultat attendu
Created symlink /etc/systemd/system/multi-user.target.wants/sonde.service → /etc/systemd/system/sonde.service.
enabled
Remettre au démarrage
systemctl enable sonde && systemctl is-enabled sonde
Résultat attendu
Created symlink /etc/systemd/system/multi-user.target.wants/sonde.service → /etc/systemd/system/sonde.service.
enabled
Remettre au démarrage
systemctl enable sonde && systemctl is-enabled sonde
Résultat attendu
Created symlink /etc/systemd/system/multi-user.target.wants/sonde.service → /etc/systemd/system/sonde.service.
enabled
Remettre au démarrage
systemctl enable sonde && systemctl is-enabled sonde
Résultat attendu
Created symlink /etc/systemd/system/multi-user.target.wants/sonde.service → /etc/systemd/system/sonde.service.
enabled
Remettre au démarrage
rc-update add sonde default
Résultat attendu
 * service sonde added to runlevel default

6Le redémarrage automatique

Restart=always (supervise-daemon sur Alpine) relance le service quand son processus disparaît, plantage ou kill. Pour le voir, tuez le processus par son nom, attendez le délai de relance et regardez : nouveau PID, compteur de redémarrages à 1.

Tuer le processus, attendre 6 secondes, regarder
pkill sonde.sh; sleep 6; systemctl show -p MainPID -p NRestarts sonde
Résultat attendu
MainPID=29655
NRestarts=1
(un autre PID que celui de systemctl status à l'étape 3)
Tuer le processus, attendre 6 secondes, regarder
pkill sonde.sh; sleep 6; systemctl show -p MainPID -p NRestarts sonde
Résultat attendu
MainPID=29655
NRestarts=1
(un autre PID que celui de systemctl status à l'étape 3)
Tuer le processus, attendre 6 secondes, regarder
pkill sonde.sh; sleep 6; systemctl show -p MainPID -p NRestarts sonde
Résultat attendu
MainPID=29655
NRestarts=1
(un autre PID que celui de systemctl status à l'étape 3)
Tuer le processus, attendre 6 secondes, regarder
pkill sonde.sh; sleep 6; systemctl show -p MainPID -p NRestarts sonde
Résultat attendu
MainPID=29655
NRestarts=1
(un autre PID que celui de systemctl status à l'étape 3)
Tuer le processus, attendre 4 secondes, regarder
pkill sonde.sh; sleep 4; rc-status | grep sonde
Résultat attendu
 sonde                                                 [  started 00:00:02 (1) ]
(reparti depuis 2 secondes, relancé 1 fois)
Ce que le journal en dit
journalctl -u sonde -n 5
Résultat attendu
Sep 17 18:26:57 serveur sonde.sh[29583]: sonde vivante, charge : 0.00 0.10 0.12
Sep 17 18:27:06 serveur systemd[1]:sonde.service: Deactivated successfully.
Sep 17 18:27:11 serveur systemd[1]:sonde.service: Scheduled restart job, restart counter is at 1.
Sep 17 18:27:11 serveur systemd[1]:Started sonde.service - Sonde de demonstration.
Sep 17 18:27:11 serveur sonde.sh[29655]: sonde vivante, charge : 0.00 0.09 0.11
Ce que le journal en dit
journalctl -u sonde -n 5
Résultat attendu
Sep 17 18:26:57 serveur sonde.sh[29583]: sonde vivante, charge : 0.00 0.10 0.12
Sep 17 18:27:06 serveur systemd[1]:sonde.service: Deactivated successfully.
Sep 17 18:27:11 serveur systemd[1]:sonde.service: Scheduled restart job, restart counter is at 1.
Sep 17 18:27:11 serveur systemd[1]:Started sonde.service - Sonde de demonstration.
Sep 17 18:27:11 serveur sonde.sh[29655]: sonde vivante, charge : 0.00 0.09 0.11
Ce que le journal en dit
journalctl -u sonde -n 5
Résultat attendu
Sep 17 18:26:57 serveur sonde.sh[29583]: sonde vivante, charge : 0.00 0.10 0.12
Sep 17 18:27:06 serveur systemd[1]:sonde.service: Deactivated successfully.
Sep 17 18:27:11 serveur systemd[1]:sonde.service: Scheduled restart job, restart counter is at 1.
Sep 17 18:27:11 serveur systemd[1]:Started sonde.service - Sonde de demonstration.
Sep 17 18:27:11 serveur sonde.sh[29655]: sonde vivante, charge : 0.00 0.09 0.11
Ce que le journal en dit
journalctl -u sonde -n 5
Résultat attendu
Sep 17 18:26:57 serveur sonde.sh[29583]: sonde vivante, charge : 0.00 0.10 0.12
Sep 17 18:27:06 serveur systemd[1]:sonde.service: Deactivated successfully.
Sep 17 18:27:11 serveur systemd[1]:sonde.service: Scheduled restart job, restart counter is at 1.
Sep 17 18:27:11 serveur systemd[1]:Started sonde.service - Sonde de demonstration.
Sep 17 18:27:11 serveur sonde.sh[29655]: sonde vivante, charge : 0.00 0.09 0.11
Ce que le journal en dit
grep sonde /var/log/messages | tail -n 3
Résultat attendu
Sep 17 18:27:12 serveur daemon.warn supervise-daemon[3888]: /usr/local/bin/sonde.sh, pid 3889, terminated by signal 15
Sep 17 18:27:14 serveur daemon.info supervise-daemon[3943]: Child command line: /usr/local/bin/sonde.sh
Sep 17 18:27:14 serveur user.notice sonde: sonde vivante, charge : 0.00 0.00 0.00

7Une tâche planifiée : sauvegarder /etc chaque nuit

Un timer systemd lance un service à heure fixe, comme cron. Le service est de type oneshot (il fait son travail et s'arrête) ; le timer le déclenche chaque nuit à 3 h, et Persistent=true rattrape un passage manqué si la machine était éteinte. C'est le timer qu'on active, pas le service.

Un timer systemd lance un service à heure fixe, comme cron. Le service est de type oneshot (il fait son travail et s'arrête) ; le timer le déclenche chaque nuit à 3 h, et Persistent=true rattrape un passage manqué si la machine était éteinte. C'est le timer qu'on active, pas le service.

Un timer systemd lance un service à heure fixe, comme cron. Le service est de type oneshot (il fait son travail et s'arrête) ; le timer le déclenche chaque nuit à 3 h, et Persistent=true rattrape un passage manqué si la machine était éteinte. C'est le timer qu'on active, pas le service.

Un timer systemd lance un service à heure fixe, comme cron. Le service est de type oneshot (il fait son travail et s'arrête) ; le timer le déclenche chaque nuit à 3 h, et Persistent=true rattrape un passage manqué si la machine était éteinte. C'est le timer qu'on active, pas le service.

Ici, c'est cron qui planifie : une ligne dans la table de root, et crond démarré (il est installé mais arrêté). Le détail est dans le tutoriel Configurer les tâches cron.

Ubuntu / DebianCréer le service et le timer, activer le timer
mkdir -p /var/sauvegardes
cat > /etc/systemd/system/sauvegarde.service << 'EOF'
[Unit]
Description=Sauvegarde de /etc

[Service]
Type=oneshot
ExecStart=/bin/sh -c 'tar czf /var/sauvegardes/etc-$(date +%%F).tar.gz -C / etc'
EOF
cat > /etc/systemd/system/sauvegarde.timer << 'EOF'
[Unit]
Description=Sauvegarde de /etc chaque nuit

[Timer]
OnCalendar=*-*-* 03:00:00
Persistent=true

[Install]
WantedBy=timers.target
EOF
systemctl daemon-reload
systemctl enable --now sauvegarde.timer
Résultat attendu
Created symlink /etc/systemd/system/timers.target.wants/sauvegarde.timer → /etc/systemd/system/sauvegarde.timer.
AlmaLinux / Rocky / CentOSCréer le service et le timer, activer le timer
mkdir -p /var/sauvegardes
cat > /etc/systemd/system/sauvegarde.service << 'EOF'
[Unit]
Description=Sauvegarde de /etc

[Service]
Type=oneshot
ExecStart=/bin/sh -c 'tar czf /var/sauvegardes/etc-$(date +%%F).tar.gz -C / etc'
EOF
cat > /etc/systemd/system/sauvegarde.timer << 'EOF'
[Unit]
Description=Sauvegarde de /etc chaque nuit

[Timer]
OnCalendar=*-*-* 03:00:00
Persistent=true

[Install]
WantedBy=timers.target
EOF
systemctl daemon-reload
systemctl enable --now sauvegarde.timer
Résultat attendu
Created symlink /etc/systemd/system/timers.target.wants/sauvegarde.timer → /etc/systemd/system/sauvegarde.timer.
FedoraCréer le service et le timer, activer le timer
mkdir -p /var/sauvegardes
cat > /etc/systemd/system/sauvegarde.service << 'EOF'
[Unit]
Description=Sauvegarde de /etc

[Service]
Type=oneshot
ExecStart=/bin/sh -c 'tar czf /var/sauvegardes/etc-$(date +%%F).tar.gz -C / etc'
EOF
cat > /etc/systemd/system/sauvegarde.timer << 'EOF'
[Unit]
Description=Sauvegarde de /etc chaque nuit

[Timer]
OnCalendar=*-*-* 03:00:00
Persistent=true

[Install]
WantedBy=timers.target
EOF
systemctl daemon-reload
systemctl enable --now sauvegarde.timer
Résultat attendu
Created symlink /etc/systemd/system/timers.target.wants/sauvegarde.timer → /etc/systemd/system/sauvegarde.timer.
openSUSECréer le service et le timer, activer le timer
mkdir -p /var/sauvegardes
cat > /etc/systemd/system/sauvegarde.service << 'EOF'
[Unit]
Description=Sauvegarde de /etc

[Service]
Type=oneshot
ExecStart=/bin/sh -c 'tar czf /var/sauvegardes/etc-$(date +%%F).tar.gz -C / etc'
EOF
cat > /etc/systemd/system/sauvegarde.timer << 'EOF'
[Unit]
Description=Sauvegarde de /etc chaque nuit

[Timer]
OnCalendar=*-*-* 03:00:00
Persistent=true

[Install]
WantedBy=timers.target
EOF
systemctl daemon-reload
systemctl enable --now sauvegarde.timer
Résultat attendu
Created symlink /etc/systemd/system/timers.target.wants/sauvegarde.timer → /etc/systemd/system/sauvegarde.timer.
AlpinePlanifier la sauvegarde avec cron
mkdir -p /var/sauvegardes
echo '0 3 * * * tar czf /var/sauvegardes/etc-$(date +\%F).tar.gz -C / etc' >> /etc/crontabs/root
rc-update add crond default
rc-service crond start
Résultat attendu
 * service crond added to runlevel default
 * Starting busybox crond ... [ ok ]
Voir le prochain passage
systemctl list-timers sauvegarde.timer
Résultat attendu
NEXT                        LEFT LAST PASSED UNIT             ACTIVATES
Fri 2026-09-18 03:00:00 UTC   8h -         - sauvegarde.timer sauvegarde.service

1 timers listed.
Voir le prochain passage
systemctl list-timers sauvegarde.timer
Résultat attendu
NEXT                        LEFT LAST PASSED UNIT             ACTIVATES
Fri 2026-09-18 03:00:00 UTC   8h -         - sauvegarde.timer sauvegarde.service

1 timers listed.
Voir le prochain passage
systemctl list-timers sauvegarde.timer
Résultat attendu
NEXT                        LEFT LAST PASSED UNIT             ACTIVATES
Fri 2026-09-18 03:00:00 UTC   8h -         - sauvegarde.timer sauvegarde.service

1 timers listed.
Voir le prochain passage
systemctl list-timers sauvegarde.timer
Résultat attendu
NEXT                        LEFT LAST PASSED UNIT             ACTIVATES
Fri 2026-09-18 03:00:00 UTC   8h -         - sauvegarde.timer sauvegarde.service

1 timers listed.
Vérifier la ligne
crontab -l | tail -n 1
Résultat attendu
0 3 * * * tar czf /var/sauvegardes/etc-$(date +\%F).tar.gz -C / etc
Lancer la sauvegarde tout de suite, sans attendre la nuit
systemctl start sauvegarde.service && ls -l /var/sauvegardes/
Résultat attendu
total 564
-rw-r--r-- 1 root root 574668 Sep 17 18:27 etc-2026-09-17.tar.gz
Lancer la sauvegarde tout de suite, sans attendre la nuit
systemctl start sauvegarde.service && ls -l /var/sauvegardes/
Résultat attendu
total 564
-rw-r--r-- 1 root root 574668 Sep 17 18:27 etc-2026-09-17.tar.gz
Lancer la sauvegarde tout de suite, sans attendre la nuit
systemctl start sauvegarde.service && ls -l /var/sauvegardes/
Résultat attendu
total 564
-rw-r--r-- 1 root root 574668 Sep 17 18:27 etc-2026-09-17.tar.gz
Lancer la sauvegarde tout de suite, sans attendre la nuit
systemctl start sauvegarde.service && ls -l /var/sauvegardes/
Résultat attendu
total 564
-rw-r--r-- 1 root root 574668 Sep 17 18:27 etc-2026-09-17.tar.gz
Lancer la sauvegarde tout de suite, sans attendre la nuit
tar czf /var/sauvegardes/etc-$(date +%F).tar.gz -C / etc && ls -l /var/sauvegardes/
Résultat attendu
total 237
-rw-r--r--    1 root     root        242289 Sep 17 18:24 etc-2026-09-17.tar.gz

8Quand un service ne démarre pas

Deux pannes provoquées, pour reconnaître leurs symptômes. La première : la commande lancée par le service (ExecStart, ou command sur Alpine) n'existe pas, faute de frappe, fichier déplacé ou droit d'exécution absent.

Ubuntu / DebianProvoquer la panne : un ExecStart qui n'existe pas
sed -i 's#ExecStart=/usr/local/bin/sonde.sh#ExecStart=/usr/local/bin/sonde-absente.sh#' /etc/systemd/system/sonde.service
systemctl daemon-reload
systemctl restart sonde
AlmaLinux / Rocky / CentOSProvoquer la panne : un ExecStart qui n'existe pas
sed -i 's#ExecStart=/usr/local/bin/sonde.sh#ExecStart=/usr/local/bin/sonde-absente.sh#' /etc/systemd/system/sonde.service
systemctl daemon-reload
systemctl restart sonde
FedoraProvoquer la panne : un ExecStart qui n'existe pas
sed -i 's#ExecStart=/usr/local/bin/sonde.sh#ExecStart=/usr/local/bin/sonde-absente.sh#' /etc/systemd/system/sonde.service
systemctl daemon-reload
systemctl restart sonde
openSUSEProvoquer la panne : un ExecStart qui n'existe pas
sed -i 's#ExecStart=/usr/local/bin/sonde.sh#ExecStart=/usr/local/bin/sonde-absente.sh#' /etc/systemd/system/sonde.service
systemctl daemon-reload
systemctl restart sonde
AlpineProvoquer la panne : une commande qui n'existe pas
sed -i 's#command="/usr/local/bin/sonde.sh"#command="/usr/local/bin/sonde-absente.sh"#' /etc/init.d/sonde
rc-service sonde restart
Résultat attendu
 * Stopping sonde ... [ ok ]
 * Starting sonde ...
 * supervise-daemon: /usr/local/bin/sonde-absente.sh does not exist
 * failed to start sonde
 * ERROR: sonde failed to start
Le symptôme
systemctl status sonde
Résultat attendu
● sonde.service - Sonde de demonstration
     Loaded: loaded (/etc/systemd/system/sonde.service; enabled; preset: enabled)
     Active: activating (auto-restart) (Result: exit-code) since Thu 2026-09-17 18:19:12 UTC; 1s ago
    Process: 29019 ExecStart=/usr/local/bin/sonde-absente.sh (code=exited, status=203/EXEC)
   Main PID: 29019 (code=exited, status=203/EXEC)
Le symptôme
systemctl status sonde
Résultat attendu
● sonde.service - Sonde de demonstration
     Loaded: loaded (/etc/systemd/system/sonde.service; enabled; preset: enabled)
     Active: activating (auto-restart) (Result: exit-code) since Thu 2026-09-17 18:19:12 UTC; 1s ago
    Process: 29019 ExecStart=/usr/local/bin/sonde-absente.sh (code=exited, status=203/EXEC)
   Main PID: 29019 (code=exited, status=203/EXEC)
Le symptôme
systemctl status sonde
Résultat attendu
● sonde.service - Sonde de demonstration
     Loaded: loaded (/etc/systemd/system/sonde.service; enabled; preset: enabled)
     Active: activating (auto-restart) (Result: exit-code) since Thu 2026-09-17 18:19:12 UTC; 1s ago
    Process: 29019 ExecStart=/usr/local/bin/sonde-absente.sh (code=exited, status=203/EXEC)
   Main PID: 29019 (code=exited, status=203/EXEC)
Le symptôme
systemctl status sonde
Résultat attendu
● sonde.service - Sonde de demonstration
     Loaded: loaded (/etc/systemd/system/sonde.service; enabled; preset: enabled)
     Active: activating (auto-restart) (Result: exit-code) since Thu 2026-09-17 18:19:12 UTC; 1s ago
    Process: 29019 ExecStart=/usr/local/bin/sonde-absente.sh (code=exited, status=203/EXEC)
   Main PID: 29019 (code=exited, status=203/EXEC)
La cause, dans le journal
journalctl -u sonde -n 10
Résultat attendu
Sep 17 18:19:07 serveur systemd[1]:sonde.service: Scheduled restart job, restart counter is at 1.
Sep 17 18:19:07 serveur systemd[1]:Started sonde.service - Sonde de demonstration.
Sep 17 18:19:07 serveur systemd[1]:sonde.service: Main process exited, code=exited, status=203/EXEC
Sep 17 18:19:07 serveur systemd[1]:sonde.service: Failed with result 'exit-code'.
Sep 17 18:19:12 serveur systemd[1]:sonde.service: Scheduled restart job, restart counter is at 2.
...
La cause, dans le journal
journalctl -u sonde -n 10
Résultat attendu
Sep 17 18:19:07 serveur systemd[1]:sonde.service: Scheduled restart job, restart counter is at 1.
Sep 17 18:19:07 serveur systemd[1]:Started sonde.service - Sonde de demonstration.
Sep 17 18:19:07 serveur systemd[1]:sonde.service: Main process exited, code=exited, status=203/EXEC
Sep 17 18:19:07 serveur systemd[1]:sonde.service: Failed with result 'exit-code'.
Sep 17 18:19:12 serveur systemd[1]:sonde.service: Scheduled restart job, restart counter is at 2.
...
La cause, dans le journal
journalctl -u sonde -n 10
Résultat attendu
Sep 17 18:19:07 serveur systemd[1]:sonde.service: Scheduled restart job, restart counter is at 1.
Sep 17 18:19:07 serveur systemd[1]:Started sonde.service - Sonde de demonstration.
Sep 17 18:19:07 serveur systemd[1]:sonde.service: Main process exited, code=exited, status=203/EXEC
Sep 17 18:19:07 serveur systemd[1]:sonde.service: Failed with result 'exit-code'.
Sep 17 18:19:12 serveur systemd[1]:sonde.service: Scheduled restart job, restart counter is at 2.
...
La cause, dans le journal
journalctl -u sonde -n 10
Résultat attendu
Sep 17 18:19:07 serveur systemd[1]:sonde.service: Scheduled restart job, restart counter is at 1.
Sep 17 18:19:07 serveur systemd[1]:Started sonde.service - Sonde de demonstration.
Sep 17 18:19:07 serveur systemd[1]:sonde.service: Main process exited, code=exited, status=203/EXEC
Sep 17 18:19:07 serveur systemd[1]:sonde.service: Failed with result 'exit-code'.
Sep 17 18:19:12 serveur systemd[1]:sonde.service: Scheduled restart job, restart counter is at 2.
...

« activating (auto-restart) » : le service tombe et systemd le relance en boucle toutes les 5 secondes (Restart=always). « status=203/EXEC » : systemd n'a pas pu exécuter la commande, elle n'existe pas ou n'est pas exécutable. Un « status=1/FAILURE » voudrait dire que le programme s'est lancé puis a échoué : ses propres messages sont alors juste au-dessus dans le journal.

« activating (auto-restart) » : le service tombe et systemd le relance en boucle toutes les 5 secondes (Restart=always). « status=203/EXEC » : systemd n'a pas pu exécuter la commande, elle n'existe pas ou n'est pas exécutable. Un « status=1/FAILURE » voudrait dire que le programme s'est lancé puis a échoué : ses propres messages sont alors juste au-dessus dans le journal.

« activating (auto-restart) » : le service tombe et systemd le relance en boucle toutes les 5 secondes (Restart=always). « status=203/EXEC » : systemd n'a pas pu exécuter la commande, elle n'existe pas ou n'est pas exécutable. Un « status=1/FAILURE » voudrait dire que le programme s'est lancé puis a échoué : ses propres messages sont alors juste au-dessus dans le journal.

« activating (auto-restart) » : le service tombe et systemd le relance en boucle toutes les 5 secondes (Restart=always). « status=203/EXEC » : systemd n'a pas pu exécuter la commande, elle n'existe pas ou n'est pas exécutable. Un « status=1/FAILURE » voudrait dire que le programme s'est lancé puis a échoué : ses propres messages sont alors juste au-dessus dans le journal.

OpenRC le dit tout de suite : supervise-daemon ne trouve pas la commande et le service reste stopped. Les mêmes lignes sont dans /var/log/messages (grep sonde).

Ubuntu / DebianRéparer, puis vérifier
sed -i 's#ExecStart=/usr/local/bin/sonde-absente.sh#ExecStart=/usr/local/bin/sonde.sh#' /etc/systemd/system/sonde.service
systemctl daemon-reload
systemctl restart sonde
systemctl is-active sonde
Résultat attendu
active
AlmaLinux / Rocky / CentOSRéparer, puis vérifier
sed -i 's#ExecStart=/usr/local/bin/sonde-absente.sh#ExecStart=/usr/local/bin/sonde.sh#' /etc/systemd/system/sonde.service
systemctl daemon-reload
systemctl restart sonde
systemctl is-active sonde
Résultat attendu
active
FedoraRéparer, puis vérifier
sed -i 's#ExecStart=/usr/local/bin/sonde-absente.sh#ExecStart=/usr/local/bin/sonde.sh#' /etc/systemd/system/sonde.service
systemctl daemon-reload
systemctl restart sonde
systemctl is-active sonde
Résultat attendu
active
openSUSERéparer, puis vérifier
sed -i 's#ExecStart=/usr/local/bin/sonde-absente.sh#ExecStart=/usr/local/bin/sonde.sh#' /etc/systemd/system/sonde.service
systemctl daemon-reload
systemctl restart sonde
systemctl is-active sonde
Résultat attendu
active
AlpineRéparer, puis vérifier
sed -i 's#command="/usr/local/bin/sonde-absente.sh"#command="/usr/local/bin/sonde.sh"#' /etc/init.d/sonde
rc-service sonde restart
Résultat attendu
 * Starting sonde ... [ ok ]

Seconde panne, la plus fréquente : modifier le fichier du service et redémarrer sans daemon-reload. systemd prévient, mais garde l'ancienne version chargée.

Seconde panne, la plus fréquente : modifier le fichier du service et redémarrer sans daemon-reload. systemd prévient, mais garde l'ancienne version chargée.

Seconde panne, la plus fréquente : modifier le fichier du service et redémarrer sans daemon-reload. systemd prévient, mais garde l'ancienne version chargée.

Seconde panne, la plus fréquente : modifier le fichier du service et redémarrer sans daemon-reload. systemd prévient, mais garde l'ancienne version chargée.

Changer le délai de relance, redémarrer sans relire
sed -i 's/RestartSec=5/RestartSec=3/' /etc/systemd/system/sonde.service && systemctl restart sonde
Résultat attendu
Warning: The unit file, source configuration file or drop-ins of sonde.service changed on disk. Run 'systemctl daemon-reload' to reload units.
Changer le délai de relance, redémarrer sans relire
sed -i 's/RestartSec=5/RestartSec=3/' /etc/systemd/system/sonde.service && systemctl restart sonde
Résultat attendu
Warning: The unit file, source configuration file or drop-ins of sonde.service changed on disk. Run 'systemctl daemon-reload' to reload units.
Changer le délai de relance, redémarrer sans relire
sed -i 's/RestartSec=5/RestartSec=3/' /etc/systemd/system/sonde.service && systemctl restart sonde
Résultat attendu
Warning: The unit file, source configuration file or drop-ins of sonde.service changed on disk. Run 'systemctl daemon-reload' to reload units.
Changer le délai de relance, redémarrer sans relire
sed -i 's/RestartSec=5/RestartSec=3/' /etc/systemd/system/sonde.service && systemctl restart sonde
Résultat attendu
Warning: The unit file, source configuration file or drop-ins of sonde.service changed on disk. Run 'systemctl daemon-reload' to reload units.
La valeur chargée n'a pas changé
systemctl show -p RestartUSec sonde
Résultat attendu
RestartUSec=5s
La valeur chargée n'a pas changé
systemctl show -p RestartUSec sonde
Résultat attendu
RestartUSec=5s
La valeur chargée n'a pas changé
systemctl show -p RestartUSec sonde
Résultat attendu
RestartUSec=5s
La valeur chargée n'a pas changé
systemctl show -p RestartUSec sonde
Résultat attendu
RestartUSec=5s
Relire, redémarrer, vérifier
systemctl daemon-reload && systemctl restart sonde && systemctl show -p RestartUSec sonde
Résultat attendu
RestartUSec=3s
Relire, redémarrer, vérifier
systemctl daemon-reload && systemctl restart sonde && systemctl show -p RestartUSec sonde
Résultat attendu
RestartUSec=3s
Relire, redémarrer, vérifier
systemctl daemon-reload && systemctl restart sonde && systemctl show -p RestartUSec sonde
Résultat attendu
RestartUSec=3s
Relire, redémarrer, vérifier
systemctl daemon-reload && systemctl restart sonde && systemctl show -p RestartUSec sonde
Résultat attendu
RestartUSec=3s

Sur Alpine, OpenRC relit le script à chaque commande : pas de daemon-reload. Une autre erreur classique y prend sa place : un script /etc/init.d sans droit d'exécution, refusé avec « Failed executing '/etc/init.d/sonde': Permission denied » (chmod +x le règle).

Les commandes du quotidien

nom est le nom du service, sans le suffixe .service (systemctl le complète).

nom est le nom du service, sans le suffixe .service (systemctl le complète).

nom est le nom du service, sans le suffixe .service (systemctl le complète).

nom est le nom du service, sans le suffixe .service (systemctl le complète).

nom est le nom du script dans /etc/init.d.

État, PID, mémoire et dernières lignes de journal d'un service
systemctl status nom
Tous les services chargés, en marche ou non
systemctl list-units --type=service
Les services en échec
systemctl --failed
Afficher le fichier d'un service, avec son chemin
systemctl cat nom
Relire les fichiers après une modification
systemctl daemon-reload
Les tâches planifiées et leur prochain passage
systemctl list-timers
Ce dont un service a besoin pour démarrer
systemctl list-dependencies nom
Suivre le journal d'un service en direct (Ctrl+C pour sortir)
journalctl -u nom -f
Les erreurs depuis le démarrage
journalctl -p err -b
La place que prend le journal
journalctl --disk-usage
Ce qui a ralenti le démarrage
systemd-analyze blame
État, PID, mémoire et dernières lignes de journal d'un service
systemctl status nom
Tous les services chargés, en marche ou non
systemctl list-units --type=service
Les services en échec
systemctl --failed
Afficher le fichier d'un service, avec son chemin
systemctl cat nom
Relire les fichiers après une modification
systemctl daemon-reload
Les tâches planifiées et leur prochain passage
systemctl list-timers
Ce dont un service a besoin pour démarrer
systemctl list-dependencies nom
Suivre le journal d'un service en direct (Ctrl+C pour sortir)
journalctl -u nom -f
Les erreurs depuis le démarrage
journalctl -p err -b
La place que prend le journal
journalctl --disk-usage
Ce qui a ralenti le démarrage
systemd-analyze blame
État, PID, mémoire et dernières lignes de journal d'un service
systemctl status nom
Tous les services chargés, en marche ou non
systemctl list-units --type=service
Les services en échec
systemctl --failed
Afficher le fichier d'un service, avec son chemin
systemctl cat nom
Relire les fichiers après une modification
systemctl daemon-reload
Les tâches planifiées et leur prochain passage
systemctl list-timers
Ce dont un service a besoin pour démarrer
systemctl list-dependencies nom
Suivre le journal d'un service en direct (Ctrl+C pour sortir)
journalctl -u nom -f
Les erreurs depuis le démarrage
journalctl -p err -b
La place que prend le journal
journalctl --disk-usage
Ce qui a ralenti le démarrage
systemd-analyze blame
État, PID, mémoire et dernières lignes de journal d'un service
systemctl status nom
Tous les services chargés, en marche ou non
systemctl list-units --type=service
Les services en échec
systemctl --failed
Afficher le fichier d'un service, avec son chemin
systemctl cat nom
Relire les fichiers après une modification
systemctl daemon-reload
Les tâches planifiées et leur prochain passage
systemctl list-timers
Ce dont un service a besoin pour démarrer
systemctl list-dependencies nom
Suivre le journal d'un service en direct (Ctrl+C pour sortir)
journalctl -u nom -f
Les erreurs depuis le démarrage
journalctl -p err -b
La place que prend le journal
journalctl --disk-usage
Ce qui a ralenti le démarrage
systemd-analyze blame
État d'un service (started ou stopped)
rc-service nom status
Les services de chaque niveau d'exécution et leur état
rc-status
Tous les services, démarrés ou non
rc-status --servicelist
Qui démarre à quel niveau (boot, default, sysinit)
rc-update show
Démarrer un service avec la machine
rc-update add nom default
Le retirer du démarrage
rc-update del nom
Le journal système en direct (Ctrl+C pour sortir)
tail -f /var/log/messages
Les lignes d'un service dans le journal
grep 'nom:' /var/log/messages
Les services sous contrôle

Vous savez lire l'état d'un service, créer le vôtre, suivre son journal, le faire revenir après un plantage et planifier une tâche. La suite naturelle : Configurer les tâches cron pour les planifications plus fines, et Installer Nginx avec PHP-FPM pour un vrai service à gérer.

Erreurs fréquentes

💬 Écrivez-nous sur Messenger !