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.
- Vergiss Runlevel ; Sie existieren, aber nur als Kompatibilitätsscheiben. Die systemd-Dokumentation besagt, dass das Konzept "veraltet" ist. Wenn Sie anfangen, dieses Zeug auf einem systemd Betriebssystem zu lernen, fangen Sie dort nicht an.
- Vergiss die Manpage, die marcelm zitiert hat; Es stammt überhaupt nicht aus dem richtigen Toolset und ist eine Beschreibung des Befehls eines anderen Toolset, die für systemd falsch ist.
halt
Dies ist der Befehl für die Dienstprogramme "System 5" von van Smoorenburg init
.
- Ignorieren Sie die Anweisungen, zu denen
/sbin/halt
ein symbolischer Link besteht /sbin/reboot
. das stimmt nicht mit systemd. Es gibt überhaupt kein separates reboot
Programm.
- Ignorieren Sie die Anweisungen,
halt
oder reboot
rufen Sie ein shutdown
Programm mit Befehlszeilenargumenten auf. Sie sind auch nicht wahr mit systemd. Es gibt überhaupt kein separates shutdown
Programm.
Jedes Systemverwaltungs-Toolset verfügt über eine Version dieser Dienstprogramme. systemd, Emporkömmling, nosh , van Smoorenburg init
und BSD init
haben alle ihre eigenen halt
, poweroff
und so weiter. An jedem sind ihre Mechaniken etwas unterschiedlich. So sind ihre Manualseiten.
Im systemd Toolset halt
, poweroff
,reboot
, telinit
, und shutdown
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 der systemctl
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 der systemd.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 den reboot(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 den reboot(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 den reboot(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 dem shutdown.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 übergeben systemd-shutdownd
. Und einige Shorthands lösen wall
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
- schlicht und schmucklos
halt
systemctl isolate reboot.target
hat die Abkürzungen:
shutdown -r now
telinit 6
systemctl reboot
- schlicht und schmucklos
reboot
systemctl isolate poweroff.target
hat die Abkürzungen:
shutdown -P now
telinit 0
shutdown now
systemctl poweroff
- schlicht und schmucklos
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:
Nach dem Parsen der verschiedenen Befehlszeilensyntaxen landen diese schließlich in denselben Codepfaden innerhalb des systemctl
Programms.
Anmerkungen:
- Das traditionelle Verhalten von Optionen ohne Option
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 dem shutdown
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
- systemd hat keine Ahnung von einem aktuellen Runlevel . Die Ausführung dieser Befehle ist nicht an "Wenn Sie sich auf Run-Level N befinden " gebunden .
- Die
--force
Option, die halt
, reboot
und poweroff
Befehle ist die gleiche wie zu sagen --force --force
zu den systemctl halt
, systemctl reboot
und systemctl poweroff
Befehle. Dadurch wird systemctl
versucht, reboot()
direkt anzurufen . Normalerweise wird nur versucht, Ziele zu isolieren.
telinit
ist nicht dasselbe wie init
. Sie sind verschiedene Programme in der Systemwelt, wobei letzteres ein anderer Name für das systemd
Programm ist, nicht für das systemctl
Programm. Das systemd
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