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
haltcommande les utilitaires "System 5" de Van Smoorenburg init.
- Ignorez les déclarations
/sbin/haltconstituant un lien symbolique /sbin/reboot; ce n'est pas vrai avec systemd. Il n'y a pas de rebootprogramme séparé du tout.
- Ignorez les instructions
haltou rebootappelez un shutdownprogramme avec des arguments de ligne de commande; ils ne sont également pas vrais avec systemd. Il n'y a pas de shutdownprogramme séparé du tout.
Chaque jeu d'outils de gestion de système a sa version de ces utilitaires. systemd, arriviste, Nosh , van Smoorenburg initet BSD initont tous leurs propres halt, poweroffet 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 , telinitet shutdownsont 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 systemctlpage 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.specialpage de manuel (8).
Les diagrammes de la bootuppage 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.targetcible, 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.targetcible.
systemctltente d'envoyer des demandes à systemd-logindlorsque l'appelant n'est pas le superutilisateur. Il transmet également les arrêts différés à systemd-shutdownd. Et certains raccourcis déclenchent des wallnotifications. 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 systemctlprogramme.
Remarques:
- Le comportement traditionnel de l'option-less
shutdown nowa é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 shutdowncommande.
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.targetdefault.targetsystemctl
- 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'
--forceoption de la halt, rebootet des poweroffcommandes est la même chose que dire --force --forceaux systemctl halt, systemctl rebootet les systemctl poweroffcommandes. Cela fait systemctlessayer d'appeler reboot()directement. Normalement, il essaie simplement d'isoler les cibles.
telinitn'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 systemdprogramme, pas pour le systemctlprogramme. Le systemdprogramme 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