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

97

Was ist der Unterschied zwischen den Befehlen haltund shutdown?

Wassimanen
quelle

Antworten:

77

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

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

shutdown -h now

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

shutdown -r +30 "Planned software upgrades"

Nach der Verzögerung shutdownzeigt initden Runlevel 0 (HALT) oder 6 (reboot) zu ändern. (Beachten Sie, dass das Auslassen von -hoder dazu -rführt, dass das System in den Einzelbenutzermodus (Runlevel 1) wechselt, wodurch die meisten Systemprozesse beendet werden, das System jedoch nicht angehalten wird. Der Administrator kann weiterhin als root angemeldet bleiben.)

Sobald Systemprozesse beendet und Dateisysteme abgemeldet wurden, wird das System automatisch angehalten / ausgeschaltet oder neu gestartet. Dies erfolgt mit dem Befehl haltoderreboot , mit dem Änderungen auf Datenträgern synchronisiert werden und anschließend das eigentliche Anhalten / Ausschalten oder Neustarten ausgeführt wird.

Unter Linux wenn haltoder rebootausgeführt wird , wenn das System nicht bereits den Shutdown - Prozess gestartet hat, wird es den aufrufen shutdownBefehl automatisch anstatt direkt Erfüllung ihrer beabsichtigten Wirkung. Auf Systemen wie FreeBSD melden diese Befehle jedoch zuerst die Aktion an wtmpund führen dann sofort den Stopp / Neustart selbst aus, ohne zuvor Prozesse zu beenden oder Dateisysteme abzuhängen.

PleaseStand
quelle
Gute Erklärung!
18
… Aber jetzt nicht mehr aktuell. Auf systemd Linux-Betriebssystemen existieren diese Befehle (in den Worten des systemd doco) "nur aus Kompatibilitätsgründen". Es sind nicht getrennt halt, rebootund shutdownProgramme , die sich gegenseitig aufrufen. Es gibt ein einziges Programm mit vielen Befehlszeilen-Parsern, die intern in einem Codepfad gespeichert werden. Es gibt auch keine Runlevel. Das Herunterfahren erfolgt auch nicht in einem Einzelbenutzermodus. In der Tat wurde der Einzelbenutzermodus selbst umbenannt. Weitere Informationen finden Sie unter unix.stackexchange.com/a/196014/5132 .
JdeBP
49

Die Vergangenheit

In den 1980er Jahren hatten die BSDs halt, rebootund shutdown. System 5 UNIX verfügte über ein BSD-Kompatibilitäts-Toolset. Aber ursprünglich hatte es einen eigenen, anderen shutdownBefehl; und hatte nicht haltoder rebootüberhaupt nicht. (Einige System 5-Varianten hatten Dinge wie SCO XENIX haltsys.)

Das BSD haltund die rebootBefehle waren niedrig, drastisch und unmittelbar. Der rücksichtsvolle Weg, ein BSD-System herunterzufahren, war der shutdownBefehl, der all die Dinge ausführte, die man erwartet: wallNachrichten an Benutzer, Dienste, die ordnungsgemäß beendet wurden, geschriebene Protokolleinträge, deaktivierte Anmeldungen usw.

Während die BSDs größtenteils dort waren, wo die empfangene Weisheit entstand, dass " shutdownexecs halt/ reboot", und dass letztere mit Sorgfalt verwendet werden sollten; es war die Welt System 5 , wo die Menschen das Gegenteil Gewohnheit gelernt , dass halt/ rebootwaren nur praktisch Kürzel und nichts mehr: /usr/ucb/haltvon der „BSD - Kompatibilität Package“, waren in der Tat nicht anders shutdown -h. Am Ende taten sie es beide init 0.

Weitere Lektüre

Heute

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

Die Toolsets sind ebenfalls gewachsen und haben sich geändert. Es gibt jetzt einen poweroffBefehl, der in den Betriebssystemen der 1980er Jahre nicht vorhanden war, da die Central Processing Units auf den meisten modernen Maschinen keine Möglichkeit hatten, ihre Stromversorgung zu steuern. Insbesondere Linux-Toolsets haben die BSD-Befehle erworben. Aber wie die BSD-Kompatibilitätstools unter UNIX System 5 sind sie keine exakten Workalikes und die Dinge wurden weitgehend reduziert.

Dieses Abflachen hat uns auf den Punkt gebracht , wo haltund shutdownsind meist gleich. Die genauen Details variieren jedoch von Toolset zu Toolset, und die Mechanismen der einzelnen Toolset unterscheiden sich geringfügig.

Es hat uns auch auf die etwas peinliche Position , wo dieser Befehlssatz mit Kompatibilitätsoptionen so behängt hat worden , dass es jetzt Menschen Computer zu geben , sich selbst widersprech Anweisungen wie erlaubt reboot --haltund poweroff --reboot, wie ich festgestellt , in die man -Seite für den Schmaus halt, fasthalt, reboot, fastboot, und poweroffBefehle. ☺

Das systemd-Toolset

halt, reboot, poweroff, telinit, Und shutdownsind alle ein Programm . Es ist eigentlich das eigene systemctlProgramm von systemd . Es hat mehrere Kommandozeilen-Parser für die verschiedenen Kommandozeilensyntaxen dieser Kommandos sowie für seine eigenen, die sich dann jedoch intern größtenteils in einen einzigen Codepfad unterteilen lassen. Es gibt keinen Unterschied zwischen der Verwendung haltund den Befehlsoptionen zum Auslösen einer Aktion und der Verwendung shutdownund den Befehlsoptionen zum Auslösen derselben Aktion.

systemd betrachtet den Rettungsmodus (den die Systembenutzer in Einzelbenutzermodus umbenannt haben ) nicht als Herunterfahren des Systems und kann mit keinem dieser Befehle erreicht werden. Option-less shutdown nowist dasselbe wie poweroff.

Weitere Lektüre:

Die BSDs

Die BSDs behalten ihre Semantik der 1980er Jahre weitgehend bei. haltund shutdownist somit sehr viel nicht gleichwertig in ihren Toolset. haltund rebootsind ein einziges Programm; und sind immer noch niedrig, unmittelbar und drastisch. Während shutdownund poweroffauch ein einziges Programm alle wichtigen Dinge erledigen, wie geplantes Herunterfahren, Schreiben von wallNachrichten, Protokollieren von Aktionen, Deaktivieren der Anmeldung und so weiter.

In den BSD-Toolsets wurde shutdown/ powerofftraditionell aufgerufen halt/ reboot, um die endgültige Systemstatusänderung durchzuführen . Die (heutzutage oft unkorrekte) Weisheit, die " shutdownexecs halt/ reboot" tatsächlich noch auf NetBSD und OpenBSD hält. Unter FreeBSD / TrueOS / DragonFlyBSD ist dies jedoch nur der Fall, wenn die -oOption verwendet wird. Auf dieser BSDs, sowohl diese Programme von normalerweise verordnen die Endsystem Zustandsänderung durch verschiedene Signale zu senden ( INT, USR1, und USR2) # 1 zu verarbeiten. initFührt die gesamte Systemstatusverwaltung auf diesen Systemen aus.

Auf alle, Options weniger shutdown nowist nicht gleichbedeutend mit einem halt, rebootoder poweroff. Es geht in den BSD- Single-User-Modus über , von dem aus man wieder in den Multi-User-Modus wechseln kann .

Weitere Lektüre:

Das Nosh-Toolset

Im nosh System - Management - Toolset halt, fasthalt, poweroff, fastpoweroff, reboot, und fastbootsind alle ein Programm. Es ist eine Abwärtskompatibilitätsscheibe, an die normalerweise einfach gekettet wird shutdown, das Gegenteil von empfangener Weisheit. Die --forceOption bewirkt, dass es system-controlstattdessen verkettet wird.

Daher gibt es in diesem Toolset keinen (nicht vorhandenen --force) Unterschied zwischen dem haltBefehl und dem shutdownBefehl (mit der entsprechenden Option), da dieser Satz von "BSD / System 5-Kompatibilität" -Befehlen einfach eine dünne Zwischenschicht darüber ist shutdown.

Weitere Lektüre:

Das Upstart-Toolset

Wie bei nosh gilt im Toolset für das Upstart-Systemmanagement das Gegenteil der empfangenen BSD-Weisheit. halt,, rebootund poweroffsind alle ein Programm, an das normalerweise gekettet wird shutdown; es sei denn, die --forceOption wird verwendet, wodurch das reboot()System sich selbst aufruft.

Daher gibt es auch in diesem Toolset keinen (nicht vorhandenen --force) Unterschied zwischen dem haltBefehl und dem Befehl und shutdown(mit der entsprechenden Option). Auch wieder, Option-less shutdown now(die keiner halt, rebootoder poweroffbringt das System in bis aufrufen , da sie alle eingestellten Optionen beenden) Single - User - Modus , anstatt das Herunterfahren.

Weitere Lektüre:

Das Linux System 5 init+ rcToolset

Auch in diesem Toolset gilt das Gegenteil der empfangenen BSD-Weisheit haltund es wird rebooteinfach shutdownverkettet - es sei denn, das System befindet sich bereits im ausgeschalteten Zustand oder hält die "Run-Levels" an. In diesem Fall bewirken diese Befehle tatsächlich die endgültige Änderung des Systemstatus. shutdownwiederum ketten an init.

Es gibt also auch hier keinen Unterschied (es sei denn, das System ist bereits weitgehend heruntergefahren) zwischen haltund shutdownweil das erstere nur das letztere aufruft. Und ja, wieder, Options weniger shutdown now(die keiner halt, rebootoder poweroffbringt das System in dem kann , wie sie alle eingestellten Optionen am Ende Aufruf) Single - User - Modus , anstatt das Herunterfahren.

JdeBP
quelle
Aus diesem Grund funktioniert das Abstimmungssystem nicht, wenn 80% der Wähler
Ychaouche
Sie sagen Folgendes: "Anhalten und Neustarten sind ein einziges Programm. Sie sind immer noch auf niedrigem Niveau, unmittelbar und drastisch", was anscheinend nicht der Fall ist. Ich zitiere die halt-Manpage von dragonflyBSD, die besagt: Die Dienstprogramme zum Anhalten und Neustarten leeren den Dateisystem-Cache auf die Festplatte, senden allen laufenden Prozessen ein SIGTERM (und anschließend ein SIGKILL) und halten bzw. starten das System neu. Die Aktion wird protokolliert, einschließlich der Eingabe eines Shutdown-Datensatzes in die wtmp (5) -Datei. Siehe: dragonflybsd.org/cgi/web-man?command=halt§ion=ANY
ychaouche
Lesen Sie nun die Antwort noch einmal, für eine bereits explizit angegebene (zweifache) Menge von Dingen, die nicht auf dieser Liste stehen. eine, die auch in den Handbüchern der verschiedenen BSD-Systemadministratoren aufgeführt ist.
JdeBP
welche Liste @JdeBP?
Ychaouche
11

Ich vermute, dass dies etwas von der von Ihnen verwendeten UNIX / Linux-Version abhängt. Auf Centos (und ich erwarte andere moderne Linux) wird das Herunterfahren von Aufrufen angehalten (vorausgesetzt, Sie befinden sich nicht auf Runlevel 0 oder 6), damit Ihr System sauber heruntergefahren wird. Unter Solaris 10 ist halt brutaler, es leert nur die Festplatten-Caches und schaltet das System aus - es wird kein Versuch unternommen, Skripte auszuführen oder smf-Funktionen herunterzufahren .


quelle
2

Für diejenigen, die AWS EC2 verwenden: Unter AWS shutdown stoppt eine Instanz, wenn sie halt beendet wird.

dveim
quelle
Was ist der Unterschied zwischen stoppen und beenden ?
Roaima
Das ist ein ganz anderes Thema, weil wir hier oben sind, deshalb habe ich es nicht erwähnt. Sie können jedoch einen Blick auf docs.aws.amazon.com/AWSEC2/latest/UserGuide/…
dveim
1
So in Ihrer Antwort, da sagen Sie , dass Anschlag tut , was sagt , ist, und stoppt die Instanz, während Halt (oder in der alternativen Terminologie beenden ) stoppt die Instanz und löscht sie.
Roaima
Ja. Aber das ist AWS-spezifisch.
Donnerstag,
Ah. Aha. Das OP hat keinen Kontext bereitgestellt. Du hast. Vielen Dank.
Roaima
0

In Linux, „Halt“ und „reboot“ ist Aliase der Abschaltbefehl - shutdown -hund shutdown -rjeweils. Bareword-Shutdown geht im Allgemeinen von -h aus.

Shadur
quelle
10
Sie sind nicht aliasesim Sinne von Shell-Aliasen, aber ja, im haltGrunde nur Anrufe shutdown -hund rebootläuft shutdown -r. Beachten Sie , wenn Sie den Pass -f(Kraft) Option haltoder reboot, shutdownwird nicht genannt.
Mikel
Obwohl es immer noch falsch ist, ist die Beschreibung von Shadur auf System-Betriebssystemen der Wahrheit näher als die von Mikel. Es gibt kein "A ruft nur B". Dies sind alternative Methoden zum Aufrufen eines einzelnen Programms , die unter unix.stackexchange.com/a/196014/5132 ausführlicher erläutert werden .
JdeBP
@JdeBP Damals, als ich dieses System schrieb, war es weniger als ein Jahr aus und ich hatte noch nie davon gehört. :)
Shadur
1
@JdeBP Ich würde sie beispielsweise mit dem sendmailBefehl an dieser Stelle gleichsetzen. Wie bei MTAs spielt es keine Rolle, welches Init-System Sie verwenden, da sie alle beide shutdownund haltals solches erkennen.
Shadur
1
Eigentlich ist es wichtig; weil es subtile und in der Tat unsubtile Unterschiede zwischen den Werkzeugsätzen gibt. Ironischerweise ist das auch beim sendmailBefehl der Fall . Es ist wie der sendmailBefehl, aber nicht so, wie Sie denken.
JdeBP