Lesen "Was ist der Unterschied zwischen Halt- und Shutdown-Befehlen?" Ich habe im Allgemeinen eine Idee, was der Befehl shutdown mit oder ohne -h / -r-Optionen bewirkt.
Der Befehl "halt" führt das Ausschalten des Systems auf Run-Level 0 des Systems durch.
Der Befehl "shutdown" führt ein Ausschalten des Systems auf Run-Level 1 ohne den Befehl -h oder -r aus.
Was ist mit dem Befehl "Poweroff" geht es in Run-Level 0 oder 1? Ist dies der einzige Hauptunterschied zwischen diesen drei Befehlen?
Antworten:
Und jetzt antwortete das System.
Sie verwenden laut Ihrer Frage Red Hat Enterprise Linux. Seit Version 7 wird dafür systemd verwendet. Keine der anderen Antworten ist für die Welt von systemd richtig; Auch sind einige der Annahmen in Ihrer Frage nicht.
halt
Dies ist der Befehl für die Dienstprogramme "System 5" von van Smoorenburginit
./sbin/halt
ein symbolischer Link besteht/sbin/reboot
. das stimmt nicht mit systemd. Es gibt überhaupt kein separatesreboot
Programm.halt
oderreboot
rufen Sie einshutdown
Programm mit Befehlszeilenargumenten auf. Sie sind auch nicht wahr mit systemd. Es gibt überhaupt kein separatesshutdown
Programm.Jedes Systemverwaltungs-Toolset verfügt über eine Version dieser Dienstprogramme. systemd, Emporkömmling, nosh , van Smoorenburg
init
und BSDinit
haben alle ihre eigenenhalt
,poweroff
und so weiter. An jedem sind ihre Mechaniken etwas unterschiedlich. So sind ihre Manualseiten.Im systemd Toolset
halt
,poweroff
,reboot
,telinit
, undshutdown
sind alle symbolischen Links zu/bin/systemctl
. Sie sind alle Rückwärtskompatibilität Beilagen, die einfach Kürzeln sind für systemd primäre Befehlszeilenschnittstelle aufrufen:systemctl
. Sie alles Karte (und in der Tat ist) gleiches einziges Programm. (Laut Konvention gibt die Shell an, von welchem Namen sie aufgerufen wurde.)Ziele, keine Runlevel
Die meisten dieser Befehle sind Kürzel für systemd zu sagen, mit
systemctl
, zu isolieren ein bestimmtes Ziel . Die Isolation wird in dersystemctl
Manpage (siehe auch) erklärt, kann jedoch im Sinne dieser Antwort als Starten eines Ziels und Stoppen eines anderen angesehen werden. Die in systemd verwendeten Standardziele sind auf dersystemd.special
Manpage (8) aufgeführt.Die Diagramme auf der
bootup
Manpage (7) im Toolset systemd, insbesondere das letzte, zeigen, dass drei "endgültige" Ziele hier relevant sind:halt.target
- Sobald das System den Status der vollständigen Isolierung dieses Ziels erreicht hat, hat es denreboot(RB_HALT_SYSTEM)
Systemaufruf aufgerufen. Der Kernel hat versucht, ein ROM-Überwachungsprogramm aufzurufen, oder die CPU einfach angehalten (unter Verwendung eines geeigneten Mechanismus).reboot.target
- Sobald das System den Status erreicht hat, dieses Ziel vollständig zu isolieren, hat es denreboot(RB_AUTOBOOT)
Systemaufruf (oder das Äquivalent mit der magischen Befehlszeile) aufgerufen . Der Kernel hat versucht, einen Neustart auszulösen.poweroff.target
- Sobald das System den Status der vollständigen Isolierung dieses Ziels erreicht hat, hat es denreboot(RB_POWER_OFF)
Systemaufruf aufgerufen. Der Kernel hat nach Möglichkeit versucht, das System von der Stromversorgung zu trennen.Dies sind die Dinge, über die Sie nach dem endgültigen Systemstatus nachdenken sollten, und nicht die Laufebenen. Beachten Sie aus dem Diagramm, dass das systemd-Zielsystem selbst Dinge codiert, die in anderen Systemen eher implizit als explizit sind. Beispielsweise die Vorstellung, dass jedes dieser endgültigen Ziele das
shutdown.target
Ziel umfasst , sodass Dienste beschrieben werden, die vor dem Herunterfahren von beendet werden müssen sie in Konflikt mit demshutdown.target
Ziel haben.systemctl
versucht, Anforderungen an zu senden,systemd-logind
wenn der anrufende Benutzer nicht der Superuser ist. Es werden auch verzögerte Abschaltungen an übergebensystemd-shutdownd
. Und einige Shorthands lösenwall
Benachrichtigungen aus. Abgesehen von diesen Komplexitäten, die diese Antwort um ein Vielfaches verlängern würden, vorausgesetzt, Sie sind derzeit der Superuser und fordern keine geplante Aktion an:systemctl isolate halt.target
hat die Abkürzungen:shutdown -H now
systemctl halt
halt
systemctl isolate reboot.target
hat die Abkürzungen:shutdown -r now
telinit 6
systemctl reboot
reboot
systemctl isolate poweroff.target
hat die Abkürzungen:shutdown -P now
telinit 0
shutdown now
systemctl poweroff
poweroff
systemctl isolate rescue.target
hat die Abkürzungen:telinit 1
systemctl rescue
systemctl isolate multi-user.target
hat die Abkürzungen:telinit 2
telinit 3
telinit 4
systemctl isolate graphical.target
hat die Kurzschrift:telinit 5
Nach dem Parsen der verschiedenen Befehlszeilensyntaxen landen diese schließlich in denselben Codepfaden innerhalb des
systemctl
Programms.Anmerkungen:
shutdown now
bestand darin, in den Einzelbenutzermodus zu wechseln . Dies ist bei systemd nicht der Fall.rescue.target
- Der Einzelbenutzermodus, der in systemd in Rettungsmodus umbenannt wird, ist mit demshutdown
Befehl nicht erreichbar .telinit
Ignoriert wirklich alle diese und symbolischen Links im Dateisystem, die in den Handbuchseiten beschrieben werden. Die oben genannten Zuordnungen sind in das Programm in einer Tabelle festverdrahtet .runlevelN.target
default.target
systemctl
--force
Option, diehalt
,reboot
undpoweroff
Befehle ist die gleiche wie zu sagen--force --force
zu densystemctl halt
,systemctl reboot
undsystemctl poweroff
Befehle. Dadurch wirdsystemctl
versucht,reboot()
direkt anzurufen . Normalerweise wird nur versucht, Ziele zu isolieren.telinit
ist nicht dasselbe wieinit
. Sie sind verschiedene Programme in der Systemwelt, wobei letzteres ein anderer Name für dassystemd
Programm ist, nicht für dassystemctl
Programm. Dassystemd
Programm ist nicht unbedingt mit einer Kompatibilität mit Van Smoorenburg kompiliert, und auf einigen Betriebssystemen beschwert es sich, dass es falsch aufgerufen wird, wenn man es versucht .init N
Weitere Lektüre
systemctl
. systemd manpages. freedesktop.org.systemd.special
. systemd manpages. freedesktop.org.bootup
. systemd manpages. freedesktop.org.init
. nosh Führer . Software.quelle
systemctl reboot
sollte gleichbedeutend sein mitsystemctl start reboot.target --job-mode=replace-irreversible
. Die Verwendung eines anderen Auftragsmodus ist weniger robust. unix.stackexchange.com/questions/381739/…systemctl reboot
der "sichere" Weg zum Neustart, z. B.init 6
wie würden wir sonst einen sicheren Neustart durchführen?halt
Weist die Hardware an , alle CPU-Funktionen zu stoppen , lässt sie jedoch eingeschaltet. Dies bedeutet normalerweise, dass jemand den Computer neu starten oder manuell herunterfahren muss, indem er anschließend den Netzschalter drückt. Der spezifische Weg, dies zu erreichen, ist architekturspezifisch, aber zum Beispiel stellt der x86-Befehlssatz dieHLT
Befehle bereit , die die Zentraleinheit (CPU) anhalten, bis der nächste externe Interrupt ausgelöst wird.poweroff
Wiehalt
, stoppt die CPU , sondern auch ein sendet ACPI Hardware - Signal , das das System anweisen , eine vollständige und sofortige Abschaltung zu beginnen. Dies entspricht in etwa dem Drücken des Netzschalters auf einem typischen Desktop-Computer.Beide
halt
undpoweroff
sind normalerweise symbolische Links zurreboot
ausführbaren Datei, die normalerweise dasshutdown
Tool mit den entsprechenden Argumenten (-h
,-P
oderr
) aufrufen , je nachdem, ob das Tool aufgerufenhalt
wurdepoweroff
oder obreboot
es verwendet wurde. Wenn die--force
Option anreboot
oder auf Runlevel 0 oder 6 übergeben wird,reboot
wird derreboot()
Systemaufruf jedoch mit einem entsprechenden Befehlscode aufgerufen.quelle
/sbin/init 0
oder/sbin/telinit 0
sollte das gleiche sein wie das Anhalten des Systems, obwohl die konkreten Schritte vom jeweiligen Init-System abhängen, wie z. B. System-V init , upstart oder systemd . Wenn Sie RHEL ausführen, würden Sie systemd verwenden.halt
,poweroff
Undshutdown -h
sind völlig gleichwertig. In der Tat machen Halt und Poweroff nichts anderes als callenshutdown -h
. Aus der Manpage zum Anhalten / Ausschalten:Beim Herunterfahren wird das System heruntergefahren, indem auf Runlevel 0 gewechselt wird.
Anhalten und Ausschalten (und Neustarten) spielen eine doppelte Rolle. Wenn sie beim Herunterfahren ausgeführt werden (dh in Runlevel 0 oder 6), führen sie die Operationen auf niedriger Ebene aus, die zum physischen Stoppen, Ausschalten oder Neustarten der Maschine erforderlich sind, wie in einer anderen Antwort beschrieben.
quelle