Aller au contenu
Administration Linux medium

Arrêter et redémarrer proprement un système Linux

12 min de lecture

Arrêter ou redémarrer un système Linux semble trivial — jusqu’au jour où un reboot sec coupe une transaction base de données, une session rsync, ou votre propre connexion SSH sans retour possible. Les systèmes modernes exposent plusieurs commandes (shutdown, reboot, poweroff, systemctl) qui ont des comportements proches mais pas identiques, et systemd les intègre toutes dans un modèle de targets qui remplace les anciens runlevels. Ce guide pose le minimum à savoir pour choisir la bonne commande, planifier une maintenance proprement, et ne jamais se retrouver bloqué en mode dégradé.

  • Choisir entre shutdown, reboot, poweroff et systemctl selon le contexte
  • Planifier un arrêt ou un redémarrage en prévenant les sessions actives
  • Annuler un shutdown programmé avant qu’il ne démarre
  • Comprendre la correspondance runlevels SysV ↔ targets systemd
  • Basculer en mode rescue pour une intervention de secours
  • Réinitialiser un mot de passe root perdu via le GRUB

Trois scénarios concrets motivent la maîtrise de ces commandes :

  • Maintenance programmée — vous devez rebooter après l’installation d’un kernel ou d’une mise à jour majeure. Prévenir les utilisateurs, laisser le temps aux services de terminer proprement, annuler si quelqu’un objecte.
  • Intervention urgente — un service est bloqué, les commandes ne répondent plus, il faut rebooter sans casser le filesystem.
  • Récupération — mot de passe root perdu, /etc/fstab cassé, système qui ne monte pas /. Passer par le mode rescue plutôt qu’un live CD chaque fois que possible.

C’est une compétence attendue en LFCS (domaine System Operations) et RHCSA (Operate running systems).

  • Un shell avec droits sudo ou root
  • Un serveur Linux moderne (systemd : Ubuntu 16.04+, Debian 8+, RHEL 7+, Rocky, Fedora)
  • Pour les manipulations rescue/GRUB : accès console physique ou virtuelle — SSH ne suffit pas quand le système est dégradé

Les runlevels sont des niveaux d’exécution numériques hérités d’Unix System V. Vous les croiserez encore dans la doc et sur certains systèmes legacy.

RunlevelRôle
0Arrêt complet (shutdown)
1Mono-utilisateur (maintenance)
2Multi-utilisateur sans réseau (variable)
3Multi-utilisateur avec réseau (console)
5Multi-utilisateur avec interface graphique
6Redémarrage

Le runlevel par défaut était décrit dans /etc/inittab et chaque niveau avait ses scripts sous /etc/rc<N>.d/ (S* pour démarrer, K* pour arrêter un service).

Avec systemd, les runlevels sont remplacés par des targets plus expressifs et composables. Chaque target regroupe des unités (services, sockets, mounts, timers) et peut dépendre d’autres targets.

Runlevel SysVTarget systemd
0poweroff.target
1rescue.target
2, 3, 4multi-user.target
5graphical.target
6reboot.target

Vérifier le target par défaut :

Fenêtre de terminal
systemctl get-default
# → graphical.target (poste de travail) ou multi-user.target (serveur)

Changer le target par défaut (actif au prochain boot) :

Fenêtre de terminal
sudo systemctl set-default multi-user.target

Basculer à la volée vers un target :

Fenêtre de terminal
sudo systemctl isolate multi-user.target # arrête l'interface graphique
sudo systemctl isolate rescue.target # mode de secours

Plusieurs commandes, un seul but : couper proprement.

shutdown prévient les utilisateurs connectés et laisse le temps aux services de terminer. C’est la commande à privilégier en production.

Fenêtre de terminal
# arrêt immédiat
sudo shutdown -h now
# arrêt dans 10 minutes
sudo shutdown -h +10
# arrêt programmé avec message aux utilisateurs
sudo shutdown -h +5 "Maintenance : patch kernel"
# arrêt à une heure précise (format 24h)
sudo shutdown -h 23:00

Pour annuler un arrêt programmé tant qu’il n’a pas démarré :

Fenêtre de terminal
sudo shutdown -c
Fenêtre de terminal
sudo poweroff

Équivalent à shutdown -h now + coupure explicite de l’alimentation. Utile sur serveur physique pour être sûr que la machine est vraiment éteinte.

halt — arrêt sans forcément couper l’alimentation

Section intitulée « halt — arrêt sans forcément couper l’alimentation »
Fenêtre de terminal
sudo halt

Historique, moins utilisé aujourd’hui. Sur matériel récent avec ACPI, le comportement est équivalent à poweroff.

Fenêtre de terminal
sudo systemctl poweroff

La forme systemd, équivalente à poweroff sur un système moderne. À connaître pour la cohérence avec le reste de l’écosystème systemd.

Commandes legacy encore supportées via la compatibilité SysV. À connaître pour comprendre les scripts anciens, pas à utiliser au quotidien sur un système systemd.

Les mêmes outils, avec des options différentes.

Fenêtre de terminal
sudo reboot

Fonctionne sur toutes les distributions. Termine les processus, démonte les systèmes de fichiers, puis redémarre.

Fenêtre de terminal
sudo shutdown -r now # redémarrage immédiat
sudo shutdown -r +5 "mise à jour" # dans 5 minutes, avec message
sudo shutdown -c # annuler

La version à privilégier quand d’autres utilisateurs peuvent être connectés.

Fenêtre de terminal
sudo systemctl reboot

La forme systemd, équivalente à reboot. Cohérente avec systemctl poweroff, systemctl rescue, etc.

Legacy SysV, même fonction que reboot.

Le rescue target bascule le système dans un état minimal : filesystem racine monté, shell root ouvert, pas de réseau ni de services. Utile pour réparer /etc/fstab, changer un mot de passe, lancer fsck.

Fenêtre de terminal
sudo systemctl isolate rescue.target

Tous les services non essentiels sont stoppés, un shell root attend sur la console.

Via le menu GRUB, éditer la ligne linux (touche e) et ajouter à la fin :

systemd.unit=rescue.target

Puis Ctrl+X pour démarrer avec cette option (unique). Très utile quand le système ne termine pas son boot normal.

Si même rescue ne démarre pas (filesystem cassé, par exemple), bascule vers emergency.target qui n’essaie même pas de monter le filesystem en lecture-écriture :

systemd.unit=emergency.target

Le filesystem racine est alors monté en lecture seule. Pour le passer en RW afin de réparer :

Fenêtre de terminal
mount -o remount,rw /

Cas classique : réinitialiser un mot de passe root perdu

Section intitulée « Cas classique : réinitialiser un mot de passe root perdu »
  1. Redémarrer et entrer dans GRUB, interrompre le démarrage auto.

  2. Éditer la ligne linux et ajouter en fin de ligne :

    rd.break

    (Alternative RHEL/Rocky. Sur Debian/Ubuntu : systemd.unit=rescue.target avec mot de passe root requis ; si aucun mot de passe n’est défini, rd.break reste la voie.)

  3. Démarrer (Ctrl+X). Le système s’arrête avant de monter / — vous êtes dans un initramfs avec un shell switch_root:/#.

  4. Monter le filesystem racine en RW :

    Fenêtre de terminal
    mount -o remount,rw /sysroot
    chroot /sysroot
  5. Changer le mot de passe :

    Fenêtre de terminal
    passwd root
  6. Forcer le relabel SELinux (RHEL/Rocky/Fedora) au prochain boot, sinon le nouveau /etc/shadow sera refusé :

    Fenêtre de terminal
    touch /.autorelabel
  7. Sortir et rebooter :

    Fenêtre de terminal
    exit # quitte le chroot
    exit # quitte l'initramfs, poursuit le boot
  • Préférez shutdown -r +N à reboot dès qu’il y a d’autres utilisateurs potentiellement connectés.
  • Annoncez une maintenance avec un message explicite dans la commande (-k envoie un wall message sans éteindre, utile pour prévenir sans encore rebooter).
  • Vérifiez systemctl list-units --failed avant un reboot : un service déjà en échec ne redémarrera pas magiquement après le reboot, il faut diagnostiquer avant.
  • Désactivez proprement les services qui ne doivent pas redémarrer (systemctl disable) plutôt que de les kill manuellement à chaque boot.
  • Logs du dernier reboot : journalctl -b -1 affiche le journal du boot précédent ; essentiel pour comprendre un crash.
  • last reboot et last shutdown listent l’historique depuis /var/log/wtmp.
  • Annuler un shutdown : sudo shutdown -c tant que l’arrêt n’a pas commencé.

  • Rebooter en target alternatif une seule fois :

    Fenêtre de terminal
    sudo systemctl reboot --boot-loader-menu=10 # affiche le menu GRUB 10 s
  • Protéger le GRUB avec un mot de passe pour empêcher quiconque ayant accès à la console d’entrer en rescue — voir Durcir le bootloader dans le guide BP-028.

  • Garder un accès physique / IPMI / console cloud : si un kernel mis à jour ne boote pas, c’est la seule voie de retour.

SymptômeCause probableAction
reboot rend la main mais la machine ne redémarre pasService bloqué au stop, attend son timeoutAttendre ou forcer : sudo systemctl reboot --force --force
Le système boote en mode rescue sans raison/etc/fstab cassé ou device absentÉditer /etc/fstab, systemctl daemon-reload, puis reboot
shutdown -c n’annule rienLe shutdown a déjà commencé son phase finaleTrop tard, attendre le reboot
Le mot de passe root ne passe pas après passwd rootRelabel SELinux non déclenchéAu prochain boot : touch /.autorelabel avant sortie
Aucune console après boot en rescueLe target nécessite un mot de passe root que vous n’avez pasUtiliser rd.break au niveau initramfs
Le système redémarre en boucle après rebootKernel cassé ou driver manquantGRUB → choisir le kernel précédent (entrée « advanced options »)
systemctl list-units --failed liste plusieurs services après rebootDépendances mal ordonnées ou ressource absentejournalctl -xe -u <service> pour chaque service en échec
  • Quatre commandes principales : shutdown (planifié), reboot (rapide), poweroff (éteindre), systemctl poweroff/reboot (forme systemd).
  • shutdown -r +N "message" est la commande par défaut en production — prévient les utilisateurs, laisse le temps aux services.
  • shutdown -c annule, tant que l’arrêt n’a pas commencé.
  • Targets systemd remplacent les runlevels : multi-user.target, graphical.target, rescue.target, emergency.target.
  • systemctl isolate <target> bascule à la volée sans reboot.
  • Rescue mode s’active via systemctl isolate rescue.target ou en passant systemd.unit=rescue.target dans GRUB.
  • rd.break dans GRUB permet de réinitialiser un mot de passe root perdu (avec relabel SELinux si applicable).
  • journalctl -b -1 pour analyser le boot précédent après incident.
  • Protéger GRUB par mot de passe en production pour empêcher l’accès rescue non autorisé.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn