Lesen von „Was ist der Unterschied zwischen den Befehlen Halt und Shutdown?“ , habe ich im Allgemeinen eine Vorstellung davon, was der Befehl shutdown macht, mit oder ohne -h/-r-Optionen.
Der Befehl „halt“ schaltet das System auf Runlevel 0
des Systems aus.
Der „shutdown“-Befehl bewirkt ein Herunterfahren des Systems auf Runlevel
1 ohne -h- oder -r-Befehl.
Was ist mit dem Befehl „poweroff“, geht er in Runlevel 0 oder 1?
Ist dies der einzige Hauptunterschied zwischen diesen drei Befehlen?
Akzeptierte Antwort:
Und jetzt die systemd-Antwort.
Sie verwenden gemäß dem Tag in Ihrer Frage Red Hat Enterprise Linux. Seit Version 7 verwendet das systemd. Keine der anderen Antworten ist für die Welt von systemd richtig; noch nicht einmal einige der Annahmen in Ihrer Frage.
- Vergessen Sie Runlevels; Sie existieren, aber nur als Kompatibilitäts-Shims. Die systemd-Dokumentation gibt an, dass das Konzept „obsolet“ ist. Wenn Sie beginnen, diese Dinge auf einem systemd-Betriebssystem zu lernen, beginnen Sie nicht dort.
- Vergiss die Handbuchseite, die Marcelm zitiert hat; Es stammt überhaupt nicht aus dem richtigen Toolset und ist eine Beschreibung des Befehls eines anderen Toolsets, der für Systemds falsch ist. Es ist der für den
halt
Befehl vom van Smoorenburg „System 5“init
Dienstprogramme. - Ignorieren Sie die Anweisungen, die
/sbin/halt
enthalten ist ein symbolischer Link zu/sbin/reboot
; Das ist bei systemd nicht der Fall. Es gibt keinen separatenreboot
Programm überhaupt. - Ignorieren Sie die Anweisungen, die
halt
oderreboot
Rufen Sie einshutdown
auf Programm mit Kommandozeilenargumenten; sie sind auch nicht wahr mit systemd. Es gibt kein separatesshutdown
Programm überhaupt.
Jedes Systemverwaltungs-Toolset hat seine Version dieser Dienstprogramme. systemd, Emporkömmling, nosh, van Smoorenburg init
, und BSD init
alle haben ihren eigenen halt
, poweroff
, und so weiter. Bei jedem sind ihre Mechaniken etwas anders. Ebenso ihre Handbuchseiten.
Im systemd-Toolset halt
,poweroff
,reboot
, telinit
, und shutdown
sind alle symbolische Links zu /bin/systemctl
. Sie sind alle Abwärtskompatibilitäts-Shims, die einfach Abkürzungen zum Aufrufen der primären Befehlszeilenschnittstelle von systemd sind:systemctl
. Sie sind alle auf dieselbe Single abgebildet (und sind es tatsächlich). Programm. (Konventionell teilt ihr die Shell mit, von welchem Namen sie aufgerufen wurde.)
Ziele, keine Runlevel
Die meisten dieser Befehle sind Abkürzungen für die Angabe von systemd unter Verwendung von systemctl
, zu isolieren ein bestimmtes Ziel . Isolation wird im systemctl
erklärt Handbuchseite (siehe dort), kann aber für die Zwecke dieser Antwort so betrachtet werden, als würde man ein Ziel starten und alle anderen stoppen. Die in systemd verwendeten Standardziele sind in systemd.special
aufgeführt (8) Handbuchseite.
Die Diagramme zum bootup
(7) Handbuchseite im Systemd-Toolset, insbesondere die letzte, zeigen, dass es drei „endgültige“ Ziele gibt, die hier relevant sind:
halt.target
— Sobald das System den Zustand der vollständigen Isolierung dieses Ziels erreicht hat, wird es denreboot(RB_HALT_SYSTEM)
aufgerufen haben Systemaufruf. Der Kernel wird versucht haben, ein ROM-Überwachungsprogramm aufzurufen, oder einfach die CPU angehalten haben (unter Verwendung eines geeigneten Mechanismus).reboot.target
— Sobald das System den Zustand der vollständigen Isolierung dieses Ziels erreicht hat, wird es denreboot(RB_AUTOBOOT)
aufgerufen haben Systemaufruf (oder das Äquivalent mit der magischen Befehlszeile). Der Kernel wird versucht haben, einen Neustart auszulösen.poweroff.target
— Sobald das System den Zustand der vollständigen Isolierung dieses Ziels erreicht hat, wird es denreboot(RB_POWER_OFF)
aufgerufen haben Systemaufruf. Der Kernel wird, wenn möglich, versucht haben, das System von der Stromversorgung zu trennen.
Diese sind die Dinge, an die Sie als endgültige Systemzustände denken sollten, nicht die Ausführungsebenen. Beachten Sie aus dem Diagramm, dass das systemd-Zielsystem selbst Dinge codiert, die in anderen Systemen eher implizit als explizit sind:wie die Vorstellung, dass jedes dieser endgültigen Ziele das shutdown.target
umfasst target, sodass man Dienste beschreibt, die vor dem Herunterfahren gestoppt werden müssen, indem man sie in Konflikt bringt das shutdown.target
Ziel.
systemctl
versucht Anfragen an systemd-logind
zu senden wenn der aufrufende Benutzer nicht der Superuser ist. Es übergibt auch verzögertes Herunterfahren an systemd-shutdownd
. Und einige Abkürzungen lösen wall
aus Benachrichtigungen. 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
- schlichter schmuckloser
halt
systemctl isolate reboot.target
hat die Abkürzungen:shutdown -r now
telinit 6
systemctl reboot
- einfacher, schmuckloser
reboot
systemctl isolate poweroff.target
hat die Abkürzungen:shutdown -P now
telinit 0
shutdown now
systemctl poweroff
- schlichtes schmuckloses
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 Kurzform:telinit 5
Nach dem Analysieren der verschiedenen unterschiedlichen Befehlszeilensyntaxen landen diese schließlich alle in denselben Codepfaden innerhalb von systemctl
Programm.
Hinweise:
- Das traditionelle Verhalten von Option-less
shutdown now
war, in den Einzelbenutzermodus zu wechseln . Dies ist bei systemd nicht der Fall.rescue.target
— Einzelbenutzermodus wird in Rettungsmodus umbenannt in systemd — ist mitshutdown
nicht erreichbar Befehl. telinit
wirklich alle dieserunlevelN.target
unddefault.target
symbolische Links im Dateisystem, die die Handbuchseiten beschreiben. Die oben genannten Mappings sind insystemctl
fest verdrahtet Programm, in einer Tabelle.- systemd hat keine Ahnung von einem aktuellen Runlevel . Die Ausführung dieser Befehle ist nicht abhängig von „wenn Sie sich in Runlevel N befinden „.
- Der
--force
Option zumhalt
,reboot
, undpoweroff
Befehle ist dasselbe wie--force --force
zu sagen zumsystemctl halt
,systemctl reboot
undsystemctl poweroff
Befehle. Dies machtsystemctl
versuchen Sie,reboot()
aufzurufen direkt. Normalerweise versucht es nur, Ziele zu isolieren. telinit
ist nicht dasselbe wieinit
. Sie sind verschiedene Programme in der systemd-Welt, wobei letzteres ein anderer Name fürsystemd
ist Programm, nicht fürsystemctl
Programm. Dassystemd
Das Programm ist nicht unbedingt mit irgendeiner Van-Smoorenburg-Kompatibilität kompiliert und beschwert sich auf einigen systemd-Betriebssystemen darüber, dass es falsch aufgerufen wird, wenn maninit N
.
Weiterführende Literatur
- Gibt es gute Gründe, das System anzuhalten, ohne die Stromversorgung zu unterbrechen?
- Warum führt „init 0“ bei der Arch-Installation zu „überschüssigen Argumenten“?
- Stephen Wadeley (2014). „8. Verwalten von Diensten mit systemd“ Red Hat Enterprise Linux 7 Handbuch für Systemadministratoren . Red Hat.
- Lennart Pöttering (2013-10-07).
systemctl
. systemd Handbuchseiten. freedesktop.org. - Lennart Pöttering (2013-10-07).
systemd.special
. systemd Handbuchseiten. freedesktop.org. - Lennart Pöttering (2013-10-07).
bootup
. systemd Handbuchseiten. freedesktop.org. - Jonathan de Boyne Pollard (2018).
init
. Nosh-Leitfaden . Software.