it-swarm.com.de

Was ist der Unterschied zwischen Halt- und Shutdown-Befehlen?

Was ist der Unterschied zwischen den Befehlen halt und shutdown?

100
wassimans

Im Allgemeinen verwendet man den Befehl shutdown . Es ermöglicht eine Zeitverzögerung und eine Warnmeldung vor dem Herunterfahren oder Neustart, was für die Systemadministration von Mehrbenutzer-Shell-Servern wichtig ist. Es kann den Benutzern die Ausfallzeit im Voraus mitteilen.

Daher muss der Befehl zum Herunterfahren wie folgt verwendet werden, um den Computer sofort anzuhalten/auszuschalten (zumindest unter Linux und FreeBSD):

shutdown -h now

Oder um es mit einer benutzerdefinierten 30-minütigen Vorwarnung neu zu starten:

shutdown -r +30 "Planned software upgrades"

Nach der Verzögerung weist shutdowninit an, auf Runlevel 0 (Halt) oder 6 (Neustart) zu wechseln. (Beachten Sie, dass das Weglassen von -h oder -r bewirkt, dass das System in den Einzelbenutzermodus (Runlevel 1) wechselt, wodurch die meisten Systemprozesse abgebrochen werden, das System jedoch nicht tatsächlich angehalten wird. Der Administrator kann weiterhin als root angemeldet bleiben.)

Sobald Systemprozesse beendet und Dateisysteme abgehängt wurden, wird das System angehalten/ausgeschaltet oder automatisch neu gestartet. Dies erfolgt mit dem Befehl halt oder reboot , der Änderungen mit Festplatten synchronisiert und dann das eigentliche Anhalten/Ausschalten oder Neustarten durchführt.

Wenn unter Linux halt oder reboot ausgeführt wird, während das System den Herunterfahrvorgang noch nicht gestartet hat, wird der Befehl shutdown automatisch aufgerufen, anstatt die beabsichtigte Aktion direkt auszuführen. auf Systemen wie FreeBSD protokollieren diese Befehle die Aktion jedoch zuerst in wtmp und werden dann sofort Führen Sie den Stopp/Neustart selbst durch, ohne zuvor Prozesse abzubrechen oder Dateisysteme abzuhängen.

80
PleaseStand

Die Vergangenheit

In den 1980er Jahren hatten die BSDs halt, reboot und shutdown. System 5 UNIX verfügte über ein BSD-Kompatibilitätstoolset. Aber nativ hatte es seinen eigenen, anderen Befehl shutdown; und hatte überhaupt nicht halt oder reboot. (Einige System 5-Varianten hatten Dinge wie SCO XENIXs haltsys.)

Die Befehle BSD halt und reboot waren auf niedriger Ebene, drastisch und unmittelbar. Der rücksichtsvolle Weg, ein BSD-System herunterzufahren, war der Befehl shutdown, der all die Dinge tat, die man erwartet: wall Nachrichten an Benutzer, Dienste wurden ordnungsgemäß beendet, Protokolleinträge geschrieben, Anmeldungen deaktiviert usw.

Während die BSDs größtenteils dort waren, wo die empfangene Weisheit ihren Ursprung hatte, dass "shutdown execs halt/reboot" und dass letztere mit Vorsicht verwendet werden sollten; Es war die System 5-Welt, in der die Leute die gegenteilige Angewohnheit lernten, dass halt/reboot nur handliche Abkürzungen waren und nichts weiter: /usr/ucb/halt aus dem "BSD-Kompatibilitätspaket" nicht anders als shutdown -h. Am Ende machten beide init 0.

Weiterführende Literatur

Heute

Heutzutage verfügen wir über eine Reihe möglicher Systemverwaltungs-Toolsets. Die BSDs haben immer noch ihr Toolset, obwohl sie in den 1990er Jahren von möglichen AT & Tisms befreit wurden. Miquel van Smoorenburg schrieb 1992 (neu) ein Linux init + rc und die dazugehörigen Tools, die heute als "System 5 init" bezeichnet werden, obwohl dies eigentlich nicht der Fall ist die Software von UNIX System 5 (und ist nicht nur init). Es gibt auch systemd , pstart und nosh , von denen jede ihre eigenen Implementierungen hat von halt, reboot, fasthalt, fastboot und so weiter.

Die Toolsets sind ebenfalls gewachsen und haben sich geändert. Es gibt jetzt einen Befehl poweroff, der in den Betriebssystemen der 1980er Jahre nicht vorhanden ist, da die Zentraleinheiten auf den meisten modernen Maschinen keine Möglichkeit hatten, ihre Stromversorgungen zu steuern. Insbesondere Linux-Toolsets haben die BSD-Befehle erhalten. Aber wie die BSD-Kompatibilitätstools unter UNIX System 5 sind sie keine exakten Workalikes und die Dinge wurden weitgehend abgeflacht.

Diese Abflachung hat uns zu dem Punkt gebracht, an dem halt und shutdown meistens gleich sind. Die genauen Details variieren jedoch von Toolset zu Toolset, und die Mechanik jedes Toolset unterscheidet sich geringfügig.

Es hat uns auch zu einer etwas peinlichen Position gebracht, in der dieser Befehlssatz so mit Kompatibilitätsoptionen geschmückt ist, dass die Benutzer nun selbst widersprüchliche Anweisungen wie reboot --halt Und poweroff --reboot Geben können, wie ich auf der Handbuchseite für die Befehle nosh halt, fasthalt, reboot, fastboot und poweroff vermerkt. ☺

Das systemd Toolset

halt, reboot, poweroff, telinit und shutdown sind alle ein Programm. Es ist eigentlich systemds eigenes systemctl Programm. Es verfügt über mehrere Befehlszeilen-Parser für die verschiedenen Befehlszeilensyntaxen dieser Befehle sowie für seine eigenen, wird danach jedoch intern weitgehend in einen Codepfad geleitet. Es gibt keinen Unterschied zwischen der Verwendung von halt und seinen Befehlsoptionen zum Auslösen einer Aktion und der Verwendung von shutdown und seinen Befehlsoptionen zum Auslösen derselben Aktion.

systemd betrachtet Rettungsmodus (was die systemd-Leute in Einzelbenutzermodus umbenannt haben) nicht als heruntergefahrenen Systemstatus und ist nicht erreichbar mit einem dieser Befehle. Optionslos shutdown now Ist dasselbe wie poweroff.

Weiterführende Literatur:

Die BSDs

Die BSDs behalten weitgehend ihre Semantik der 1980er Jahre bei. halt und shutdown sind daher in ihren Toolsets sehr viel nicht äquivalent. halt und reboot sind ein einziges Programm; und sind immer noch niedrig, unmittelbar und drastisch. Während shutdown und poweroff, ebenfalls ein einziges Programm, alle rücksichtsvollen Aufgaben wie das geplante Herunterfahren, das Schreiben von wall - Nachrichten, das Protokollieren von Aktionen, das Deaktivieren der Anmeldung usw. ausführen.

In den BSD-Toolsets hat shutdown/poweroff traditionell halt/reboot aufgerufen, um die endgültige Änderung des Systemstatus vorzunehmen. Die (heutzutage oft falsche) erhaltene Weisheit, dass "shutdown execs halt/reboot" tatsächlich immer noch auf NetBSD und OpenBSD gilt. Unter FreeBSD/TrueOS/DragonFlyBSD ist dies jedoch nur der Fall, wenn die Option -o Verwendet wird. Auf diesen BSDs bewirken beide dieser Programme normalerweise die endgültige Systemzustandsänderung durch Senden verschiedener Signale (INT, USR1 und USR2), um # 1 zu verarbeiten. init macht all Systemstatusverwaltung auf diesen Systemen.

Bei allen ist option-less shutdown now Nicht gleichbedeutend mit halt, reboot oder poweroff. Es geht in den BSD Einzelbenutzermodus über, von dem aus man zurück in Mehrbenutzermodus wechseln kann.

Weiterführende Literatur:

Das Nosh-Toolset

Im Nosh-Systemverwaltungs-Toolset sind halt, fasthalt, poweroff, fastpoweroff, reboot und fastboot alles ein Programm. Es ist ein Abwärtskompatibilitäts-Shim, der normalerweise einfach an shutdown, das Gegenteil der empfangenen Weisheit, kettet. Mit der Option --force Wird die Kette stattdessen mit system-control Verkettet.

Es gibt also keinen Unterschied (ohne --force) Zwischen dem Befehl halt und dem Befehl shutdown (mit der entsprechenden Option) in diesem Toolset, wie dieser Satz von "BSD/System 5" Kompatibilitätsbefehle sind einfach eine dünne Shim-Schicht über shutdown.

Weiterführende Literatur:

Das Upstart-Toolset

Wie bei nosh gilt im Upstart-Systemverwaltungs-Toolset das Gegenteil der empfangenen BSD-Weisheit. halt, reboot und poweroff sind alle ein Programm, das normalerweise mit shutdown verkettet ist; es sei denn, die Option --force wird verwendet, wodurch sich das System reboot() selbst aufruft.

Es gibt also wieder keinen Unterschied (ohne --force) Zwischen dem Befehl halt und dem Befehl shutdown (mit der entsprechenden Option) in diesem Toolset. Auch hier kann das System ohne Option shutdown now (Was keines von halt, reboot oder poweroff aufrufen kann, da alle Optionen festgelegt sind) in Einzelbenutzermodus anstatt es herunterzufahren.

Weiterführende Literatur:

Das Linux System 5 init + rc Toolset

Auch in diesem Toolset gilt das Gegenteil der empfangenen BSD-Weisheit, und halt und reboot verketten sich einfach mit shutdown - es sei denn, das System befindet sich bereits im Aus- oder Stopp-Run-Level ", In diesem Fall bewirken diese Befehle tatsächlich die endgültige Änderung des Systemstatus. shutdown kettet seinerseits an init.

Es gibt also wieder keinen Unterschied (es sei denn, das System ist bereits weitgehend heruntergefahren) zwischen halt und shutdown, da das erstere nur das letztere aufruft. Und ja, wieder, ohne Option shutdown now (Was keines von halt, reboot oder poweroff aufrufen kann, da alle Optionen festgelegt sind) das System in Einzelbenutzermodus anstatt es herunterzufahren.

52
JdeBP

Ich vermute, dass dies etwas davon abhängt, welche Version von UNIX/Linux Sie verwenden. Unter Centos (und ich erwarte andere moderne Linux-Systeme) werden die Aufrufe zum Herunterfahren angehalten (vorausgesetzt, Sie befinden sich nicht auf Runlevel 0 oder 6), sodass Ihr System sauber heruntergefahren wird. Unter Solaris 10 ist das Anhalten brutaler, es löscht nur die Festplatten-Caches und schaltet das System aus - es wird kein Versuch unternommen, Skripte auszuführen oder Funktionen herunterzufahren smf .

11
user591

Für diejenigen, die AWS EC2 verwenden: auf AWS shutdownstoppt eine Instanz, wenn haltbeendet es.

3
dveim

Unter Linux sind "halt" und "reboot" Aliase des Befehls shutdown - shutdown -h und shutdown -r beziehungsweise. Das Herunterfahren von Barwörtern setzt im Allgemeinen -h voraus.

0
Shadur