Lecture "Quelle est la différence entre les commandes Halt et Shutdown?" J'ai généralement une idée de ce que fait la commande shutdown, avec ou sans les options -h / -r.
La commande "arrêt" exécute le système hors tension pour exécuter le niveau d'exécution 0 du système.
La commande "shutdown" exécute une mise hors tension du système au niveau d'exécution 1 sans la commande -h ou -r.
Qu'en est-il de la commande "poweroff" passe-t-elle au niveau d'exécution 0 ou 1? Est-ce la seule différence principale entre ces trois commandes?
Réponses:
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.
halt
commande les utilitaires "System 5" de Van Smoorenburginit
./sbin/halt
constituant un lien symbolique/sbin/reboot
; ce n'est pas vrai avec systemd. Il n'y a pas dereboot
programme séparé du tout.halt
oureboot
appelez unshutdown
programme avec des arguments de ligne de commande; ils ne sont également pas vrais avec systemd. Il n'y a pas deshutdown
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 BSDinit
ont tous leurs propreshalt
,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
etshutdown
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 lasystemctl
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 lasystemd.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 lashutdown.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 deswall
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
halt
systemctl isolate reboot.target
a les raccourcis:shutdown -r now
telinit 6
systemctl reboot
reboot
systemctl isolate poweroff.target
a les raccourcis:shutdown -P now
telinit 0
shutdown now
systemctl poweroff
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:telinit 5
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:
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 lashutdown
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
--force
option de lahalt
,reboot
et despoweroff
commandes est la même chose que dire--force --force
auxsystemctl halt
,systemctl reboot
et lessystemctl poweroff
commandes. Cela faitsystemctl
essayer d'appelerreboot()
directement. Normalement, il essaie simplement d'isoler les cibles.telinit
n'est pas la même chose queinit
. Ce sont différents programmes dans le monde systemd, ce dernier étant un autre nom pour lesystemd
programme, pas pour lesystemctl
programme. Lesystemd
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
systemctl
. pages de manuel systemd. freedesktop.org.systemd.special
. pages de manuel systemd. freedesktop.org.bootup
. pages de manuel systemd. freedesktop.org.init
. nosh Guide . Logicielsla source
systemctl reboot
devrait être équivalent àsystemctl start reboot.target --job-mode=replace-irreversible
. L'utilisation de tout autre mode d'emploi est moins robuste. unix.stackexchange.com/questions/381739/…systemctl reboot
le moyen "sans danger" de redémarrer, par exemple,init 6
quel est le moyen par lequel nous ferions autrement un redémarrage sans danger?halt
ordonne au matériel d’ arrêter toutes les fonctions de la CPU , mais le laisse allumé. Cela signifie généralement que quelqu'un doit redémarrer ou éteindre la machine manuellement en appuyant ensuite sur le bouton d'alimentation. La manière spécifique d’atteindre cet objectif dépend de l’architecture, mais par exemple, le jeu d’instructions x86 fournit lesHLT
instructions qui arrêtent l’unité centrale de traitement (CPU) jusqu’à ce que la prochaine interruption externe soit déclenchée.poweroff
, commehalt
, arrête le processeur, mais envoie également un signal matériel ACPI qui demandera au système de commencer par un arrêt complet et immédiat. Cela équivaut à peu près à appuyer sur le bouton d'alimentation d'un ordinateur de bureau typique.Les deux
halt
etpoweroff
sont généralement des liens symboliques vers l'reboot
exécutable, qui invoque généralement l'shutdown
outil avec les arguments appropriés (-h
,-P
our
) en fonction de sihalt
,poweroff
ou areboot
été utilisé pour invoquer l'outil. Cependant, lorsque l'--force
option est passée àreboot
ou aux niveaux d'exécution 0 ou 6,reboot
l'reboot()
appel système est appelé avec le code de commande approprié.la source
/sbin/init 0
ou/sbin/telinit 0
devrait être identique à arrêter le système, bien que les étapes spécifiques à prendre dépendent du système init, tel que System-V init , upstart ou systemd . Si vous utilisez RHEL, vous utiliseriez systemd.halt
,poweroff
Etshutdown -h
sont tout à fait équivalent. En fait, stop et poweroff ne font qu'appelershutdown -h
. Depuis la page de manuel Halte / Poweroff:L'arrêt procède ensuite à l'arrêt du système en basculant sur le niveau d'exécution 0.
L'arrêt et l'extinction (et le redémarrage) remplissent un double rôle. Lorsqu'elles sont exécutées en cours d'arrêt (c'est-à-dire au niveau d'exécution 0 ou 6), elles effectuent les opérations de bas niveau requises pour arrêter physiquement, éteindre ou redémarrer la machine, comme décrit dans une autre réponse.
la source