Et maintenant, la réponse systemd.
Selon l'étiquette de votre question, vous utilisez Red Hat Enterprise Linux. Depuis la version 7, cela a utilisé systemd. Aucune des autres réponses n'est correcte pour le monde de systemd; ni même certaines des hypothèses dans votre question.
- Oubliez les runlevels ; ils existent, mais uniquement en tant que compatibilité. La documentation de systemd indique que le concept est "obsolète". Si vous commencez à apprendre ce genre de choses sur un système d'exploitation systemd, ne commencez pas par là.
- Oubliez la page de manuel citée par marcelm; ce n'est pas du tout le bon jeu d'outils, c'est une description de la commande d'un autre jeu d'outils, incorrecte pour celle de systemd. C’est celui qui
halt
commande les utilitaires "System 5" de Van Smoorenburg init
.
- Ignorez les déclarations
/sbin/halt
constituant un lien symbolique /sbin/reboot
; ce n'est pas vrai avec systemd. Il n'y a pas de reboot
programme séparé du tout.
- Ignorez les instructions
halt
ou reboot
appelez un shutdown
programme avec des arguments de ligne de commande; ils ne sont également pas vrais avec systemd. Il n'y a pas de shutdown
programme séparé du tout.
Chaque jeu d'outils de gestion de système a sa version de ces utilitaires. systemd, arriviste, Nosh , van Smoorenburg init
et BSD init
ont tous leurs propres halt
, poweroff
et ainsi de suite. Sur chacun leurs mécanismes sont légèrement différents. Ainsi sont leurs pages de manuel.
Dans le jeu d' outils systemd halt
, poweroff
,reboot
, telinit
et shutdown
sont tous les liens symboliques vers /bin/systemctl
. Ils sont tous les cales de compatibilité ascendante, qui sont simplement des raccourcis pour appeler l' interface de ligne de commande principale de systemd: systemctl
. Ils correspondent tous à (et sont en fait) ce même programme unique . (Par convention, le shell lui dit sous quel nom il a été appelé.)
des cibles, pas des niveaux d'exécution
La plupart de ces commandes sont des raccourcis permettant d'indiquer à systemd, using systemctl
, d' isoler une cible particulière . L'isolement est expliqué dans la systemctl
page de manuel (qv), mais peut être considéré, aux fins de cette réponse, comme un point de départ et un arrêt des autres. Les cibles standard utilisées dans systemd sont répertoriées dans la systemd.special
page de manuel (8).
Les diagrammes de la bootup
page de manuel (7) dans le jeu d'outils systemd, en particulier le dernier, montrent qu'il y a trois cibles "finales" qui sont pertinentes ici:
halt.target
- Une fois que le système a atteint l'état d'isolement complet de cette cible, il a appelé l' reboot(RB_HALT_SYSTEM)
appel système. Le noyau aura tenté d'entrer dans un programme de surveillance de la ROM ou simplement arrêté le processeur (en utilisant le mécanisme approprié).
reboot.target
- Une fois que le système a atteint l'état d'isolement complet de cette cible, il aura appelé l' reboot(RB_AUTOBOOT)
appel système (ou son équivalent avec la ligne de commande magique). Le noyau aura tenté de déclencher un redémarrage.
poweroff.target
- Une fois que le système a atteint l'état d'isolement complet de cette cible, il a appelé l' reboot(RB_POWER_OFF)
appel système. Le noyau aura tenté de couper l’alimentation du système, si possible.
Ce sont les choses auxquelles vous devriez penser en définissant le système final, et non les niveaux d'exécution. Avis du diagramme que le système cible systemd lui - même code choses qui sont, dans d' autres systèmes, plus implicites qu'explicites: tels que l'idée que chacun de ces objectifs finaux englobe la shutdown.target
cible, de sorte que l' on décrit les services qui doivent être arrêtés avant l' arrêt par les avoir en conflit avec la shutdown.target
cible.
systemctl
tente d'envoyer des demandes à systemd-logind
lorsque l'appelant n'est pas le superutilisateur. Il transmet également les arrêts différés à systemd-shutdownd
. Et certains raccourcis déclenchent des wall
notifications. Ces complexités mises à part, ce qui rallongerait cette réponse plusieurs fois, en supposant que vous êtes actuellement le super-utilisateur et que vous ne demandez pas une action planifiée:
systemctl isolate halt.target
a les raccourcis:
shutdown -H now
systemctl halt
- sans fioritures
halt
systemctl isolate reboot.target
a les raccourcis:
shutdown -r now
telinit 6
systemctl reboot
- sans fioritures
reboot
systemctl isolate poweroff.target
a les raccourcis:
shutdown -P now
telinit 0
shutdown now
systemctl poweroff
- sans fioritures
poweroff
systemctl isolate rescue.target
a les raccourcis:
telinit 1
systemctl rescue
systemctl isolate multi-user.target
a les raccourcis:
telinit 2
telinit 3
telinit 4
systemctl isolate graphical.target
a le raccourci:
Après avoir analysé les différentes syntaxes de ligne de commande, celles-ci finissent par se retrouver dans les mêmes chemins de code dans le systemctl
programme.
Remarques:
- Le comportement traditionnel de l'option-less
shutdown now
a été de passer en mode mono-utilisateur . Ce n'est pas le cas avec systemd. rescue.target
- le mode mono-utilisateur étant renommé le mode de secours dans systemd - n'est pas accessible avec la shutdown
commande.
telinit
ignore réellement tous ces liens et liens symboliques dans le système de fichiers décrit par les pages de manuel. Les mappages susmentionnés sont intégrés au programme, dans un tableau.runlevelN.target
default.target
systemctl
- systemd n'a aucune notion d'un niveau d'exécution actuel . Le fonctionnement de ces commandes ne dépend d'aucun "si vous êtes au niveau d'exécution N ".
- L'
--force
option de la halt
, reboot
et des poweroff
commandes est la même chose que dire --force --force
aux systemctl halt
, systemctl reboot
et les systemctl poweroff
commandes. Cela fait systemctl
essayer d'appeler reboot()
directement. Normalement, il essaie simplement d'isoler les cibles.
telinit
n'est pas la même chose que init
. Ce sont différents programmes dans le monde systemd, ce dernier étant un autre nom pour le systemd
programme, pas pour le systemctl
programme. Le systemd
programme n’est pas nécessairement compilé avec la moindre compatibilité avec van Smoorenburg et, sur certains systèmes d’exploitation système, il se plaint d’être invoqué incorrectement, le cas échéant .init N
Lectures complémentaires