Quelle est la différence entre les commandes Halt et Shutdown?


Réponses:


77

Généralement, on utilise la shutdowncommande . Il permet un délai et un message d'avertissement avant l'arrêt ou le redémarrage, ce qui est important pour l'administration système des serveurs shell multi-utilisateurs. il peut donner aux utilisateurs un préavis du temps d'arrêt.

En tant que tel, la commande shutdown doit être utilisée comme ceci pour arrêter / éteindre immédiatement l’ordinateur (au moins sous Linux et FreeBSD):

shutdown -h now

Ou pour le redémarrer avec un avertissement personnalisé de 30 minutes à l'avance:

shutdown -r +30 "Planned software upgrades"

Après le délai, shutdownindique initde passer au niveau d'exécution 0 (arrêt) ou 6 (redémarrage). (Notez que le fait d'omettre -hou de -rfaire passer le système en mode mono-utilisateur (niveau d'exécution 1), ce qui tue la plupart des processus système mais n'interrompt pas réellement le système; il permet néanmoins à l'administrateur de rester connecté en tant qu'utilisateur root.)

Une fois que les processus système ont été arrêtés et les systèmes de fichiers démontés, le système s'arrête / s'éteint ou redémarre automatiquement. Cette opération est effectuée à l'aide de la commande haltoureboot , qui synchronise les modifications apportées aux disques, puis effectue l'arrêt ou le redémarrage proprement dit.

Sous Linux, si haltou rebootest exécuté alors que le système n'a pas encore démarré le processus d'arrêt, il invoquera la shutdowncommande automatiquement plutôt que d'exécuter directement l'action souhaitée. Cependant, sur des systèmes tels que FreeBSD , ces commandes enregistrent d’abord l’action wtmp, puis effectuent immédiatement l’arrêt / le redémarrage, sans tuer au préalable les processus ni démonter les systèmes de fichiers.


Bonne explication!

18
… Mais maintenant obsolète. Sur les systèmes d’exploitation Linux systemd, ces commandes existent (pour reprendre les termes du doco systemd) "pour compatibilité uniquement". Il ne sont pas séparés halt, rebootet des shutdownprogrammes qui font appel à un autre. Il existe un seul programme, avec de nombreux analyseurs en ligne de commande qui aboutissent en interne à un chemin de code. Il n'y a pas non plus de niveaux d'exécution. L'arrêt ne passe pas non plus en mode utilisateur unique. En effet, le mode mono-utilisateur lui-même a été renommé. Pour plus de détails, voir unix.stackexchange.com/a/196014/5132 .
JdeBP

49

Le passé

Dans les années 1980, les BSDs avaient halt, rebootet shutdown. System 5 UNIX avait un jeu d’outils de compatibilité BSD. Mais nativement, il avait son propre shutdowncommandement , différent ; et n'a pas eu haltou rebootdu tout. (Certaines variantes du système 5 comportaient des fonctionnalités similaires à celles de SCO XENIX haltsys.)

Le BSD haltet les rebootcommandes étaient bas, drastiques et immédiats. La considération façon de fermer un système BSD était la shutdowncommande, ce qui a fait toutes les choses que l' on attend de se produire: des wallmessages aux utilisateurs, services gracieusement tués, les entrées de journal écrites, les connexions désactivées, et ainsi de suite.

Alors que les BSD étaient en grande partie à l’origine des idées reçues, les " shutdownexecs halt/ reboot" et que ces derniers devaient être utilisés avec précaution; c’était le monde System 5 où les gens avaient appris l’habitude contraire qui était halt/ rebootc’était juste des raccourcis pratiques et rien de plus /usr/ucb/halt:, du "paquet de compatibilité BSD", n’était pas différent en effet shutdown -h. Ils ont tous deux fini par faire init 0.

Lectures complémentaires

Aujourd'hui

De nos jours, nous avons toute une gamme d’outils de gestion de système possibles. Les BSD ont toujours leurs outils, bien que débarrassés de tout AT & Tism dans les années 90. Miquel van Smoorenburg a écrit (en 1992) un Linux init+ rcet ses outils associés, que les gens appellent maintenant "System 5 init", même s’il ne s’agit pas du logiciel UNIX System 5 (et init). Il y a aussi systemd , arriviste et Nosh , dont chacun ont leurs propres implémentations de halt, reboot, fasthalt, fastboot, et ainsi de suite.

Les outils ont également grandi et changé. Il existe maintenant une poweroffcommande, absente des systèmes d'exploitation des années 1980, car les unités centrales de traitement de la plupart des machines contemporaines n'avaient aucun moyen de contrôler leur alimentation. Les outils Linux, en particulier, ont acquis les commandes BSD; Toutefois, à l'instar des outils de compatibilité BSD sous UNIX System 5, ils ne sont pas des solutions à la tâche et les choses ont été largement aplaties.

Cet aplatissement nous a amenés au point où haltet shutdownsont pour l' essentiel les mêmes. Mais les détails exacts varient d'un jeu d'outils à l'autre, et les mécanismes de chaque jeu d'outils sont légèrement différents.

Il nous a aussi apporté à la position légèrement embarrassante où cet ensemble de commande est devenu si festonné avec des options de compatibilité qu'il permet maintenant aux gens de donner des ordinateurs auto-contradictoires instructions comme reboot --haltet poweroff --reboot, comme je l' ai indiqué dans la page de manuel pour le Nosh halt, fasthalt, reboot, fastboot, et poweroffcommandes. ☺

Le jeu d'outils systemd

halt, reboot, poweroff, telinitEt shutdownsont tout un programme . C'est en fait le systemctlprogramme de systemd . Il dispose de plusieurs analyseurs de ligne de commande pour les diverses syntaxes de ligne de commande de ces commandes, ainsi que de la sienne, mais après cela, il est en grande partie converti en un chemin de code en interne. Il n'y a pas de différence entre utiliser haltet ses options de commande pour déclencher une action et utiliser shutdownet ses options de commande pour déclencher la même action.

systemd ne considère pas le mode de secours (qui correspond à ce que les utilisateurs de Systemd ont renommé le mode utilisateur unique ) comme un état système arrêté, et il n'est pas accessible avec ces commandes. Option-less shutdown nowest la même chose que poweroff.

Lectures complémentaires:

Les BSD

Les BSD conservent en grande partie leur sémantique des années 1980. haltet ne shutdownsont donc pas équivalents dans leurs outils. haltet rebootsont un seul programme; et sont toujours faibles, immédiats et drastiques. Attendu que, shutdownet poweroffégalement un seul programme, fait tout ce qui est prévenant, comme l’arrêt planifié, la rédaction de wallmessages, les actions de journalisation, la désactivation de la connexion, etc.

Dans les jeux d’outils BSD, shutdown/ powerofffinissait traditionnellement par invoquer halt/ rebootpour appliquer le changement final de l’état du système. (Souvent de nos jours incorrect) ont reçu la sagesse que « shutdownexecs halt/ reboot» en fait tient toujours sur NetBSD et OpenBSD. Mais sous FreeBSD / TrueOS / DragonFlyBSD, ce n’est le cas que si l’ -ooption est utilisée. Sur ces BSDs, deux de ces programmes normalement édictant la dernière modification de l' état du système en envoyant des signaux ( INT, USR1et USR2) pour traiter # 1. initfait toute la gestion de l'état du système sur ces systèmes.

Sur chacun d'eux, option moins shutdown nowne correspond pas à l' un des halt, rebootou poweroff. Il passe en mode utilisateur unique BSD , à partir duquel il est possible de repasser en mode multi-utilisateur .

Lectures complémentaires:

Le jeu d'outils

Dans le jeu d' outils de gestion du système Nosh, halt, fasthalt, poweroff, fastpoweroff, reboot, et fastbootsont tous un programme. Il est une cale de rétrocompatibilité que normalement simplement des chaînes à shutdownl' opposé de la sagesse reçue. L' --forceoption rend la chaîne à la system-controlplace.

Il n'y a donc aucune différence (absente --force) entre la haltcommande et la shutdowncommande (avec l'option équivalente) dans cet ensemble d'outils, car cet ensemble de commandes "Compatibilité BSD / Système 5" est simplement une couche mince de calage au-dessus de shutdown.

Lectures complémentaires:

Le jeu d'outils parvenu

Comme avec nosh, dans les outils de gestion de système de pointe, l'inverse de la réception reçue par BSD s'applique. halt, rebootet poweroffsont tous un programme, qui est normalement lié à shutdown; sauf si l' --forceoption est utilisée, cela oblige le reboot()système à s'appeler lui-même.

Donc, encore une fois, il n'y a pas de différence (absente --force) entre la haltcommande et et la shutdowncommande (avec l'option équivalente) dans cet ensemble d'outils. De plus encore, moins-options shutdown now(dont aucun de halt, rebootou poweroffpeut finir invoquer comme ils l' ensemble des options) apporte le système en mode mono - utilisateur plutôt que de l' arrêter.

Lectures complémentaires:

L' ensemble d'outils Linux System 5 init+rc

Encore une fois, dans ce jeu d' outils à l'opposé de la sagesse BSD reçue applique et haltet rebootsimplement la chaîne à shutdown- à moins que le système est déjà dans le poweroff ou l' arrêt « runlevel », auquel cas ces commandes promulguent en fait le dernier changement d'état du système. shutdownà son tour des chaînes pour init.

Donc, encore une fois, il n'y a pas de différence (à moins que le système soit déjà en grande partie fermé) entre haltet shutdownparce que le premier n'invoque que le dernier. Et oui, encore une fois, moins-options shutdown now(dont aucun de halt, rebootou poweroffpeut finir par invoquer comme ils l' ensemble des options) apporte le système en mode mono - utilisateur plutôt que de le fermer.


C’est pourquoi le système électoral ne fonctionne pas lorsque 80% des électeurs
ychaouche

Vous dites que "l'arrêt et le redémarrage constituent un seul programme et sont toujours de niveau bas, immédiat et drastique", ce qui ne semble pas être le cas. Je cite la page de manuel d'arrêt de dragonflyBSD qui dit: Les utilitaires d'arrêt et de redémarrage vident le cache du système de fichiers sur le disque, envoient tous les processus en cours d'exécution à un SIGTERM (et par la suite un SIGKILL) et, respectivement, arrêtent ou redémarrent le système. L'action est consignée, y compris la saisie d'un enregistrement d'arrêt dans le fichier wtmp (5). Voir: dragonflybsd.org/cgi/web-man?command=halt§ion=ANY
ychaouche

Maintenant, lisez à nouveau la réponse, pour un ensemble de choses déjà explicitement donné (deux fois plus) qui ne figure pas sur cette liste; Celui-ci est également décrit dans les manuels de l'administrateur système des différents BSD.
JdeBP

quelle liste @JdeBP?
ychaouche

11

Je suppose que cela dépend un peu de la version d’UNIX / Linux que vous utilisez. Sur Centos (et sur d’autres systèmes d’exploitation modernes sous Linux), arrêtez l’arrêt des appels (si vous n’êtes pas au niveau d’exécution 0 ou 6) pour que votre système s’arrête proprement. Sous Solaris 10, l’arrêt est plus brutal. Il vide simplement les caches de disque et met le système hors tension. Aucune tentative d’exécution de scripts ni d’arrêt des installations smf n’est tentée .


2

Pour ceux qui utilisent AWS EC2: sur AWS shutdown , une instance est halt arrêtée quand elle se termine .


Quelle est la différence entre arrêter et terminer ?
roaima

C'est un sujet complètement différent, étant hors sujet ici, c'est pourquoi je ne l'ai pas mentionné. Mais vous pouvez jeter un oeil sur docs.aws.amazon.com/AWSEC2/latest/UserGuide/…
vendredi

1
Donc , dans votre réponse, vous dites que l' arrêt fait ce qui est dit, et arrête l'instance, alors que l' arrêt (ou dans votre autre terminologie, fin ) arrête l'instance et le supprime.
roaima

Oui. Mais c'est spécifique à AWS.
dimanche

Ah Je vois. Le PO n'a pas fourni de contexte. Tu as. Merci.
Roaima

0

Sous Linux, "stop" et "reboot" sont des alias de la commande shutdown - shutdown -het shutdown -rrespectivement. L’arrêt des mots clés suppose généralement -h.


10
Ils ne sont pas aliasesau sens des alias de shell, mais oui, en haltgros , ils appellent shutdown -het rebootcourent shutdown -r. Notez que si vous passez l' -foption (force) à haltou reboot, il shutdownn'est pas appelé.
Mikel

En fait, bien que ce soit toujours faux, sur les systèmes d'exploitation système, la description de Shadur est plus proche de la vérité que la correction de Mikel. Il n'y a pas de "A appelle simplement B". Ce sont tous des moyens alternatifs d'invoquer un seul programme , comme expliqué plus en détail sur unix.stackexchange.com/a/196014/5132 .
JdeBP

@JdeBP Quand j'ai écrit ce système, il était sorti depuis moins d'un an et je n'en avais même jamais entendu parler. :)
Shadur

1
@JdeBP Je les assimilerais à, disons, la sendmailcommande à ce stade - Comme avec les MTA, le système d'initialisation que vous utilisez n'a pas d'importance, car ils reconnaîtront tous les deux shutdownet en halttant que tels.
Shadur

1
En fait, c'est important; car il existe des différences subtiles, voire insoupçonnées, entre les jeux d'outils. Ironiquement, c'est également le cas de la sendmailcommande. C'est comme la sendmailcommande, mais pas comme vous le pensez.
JdeBP
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.