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.
haltDies ist der Befehl für die Dienstprogramme "System 5" von van Smoorenburg init.
- Ignorieren Sie die Anweisungen, zu denen
/sbin/haltein symbolischer Link besteht /sbin/reboot. das stimmt nicht mit systemd. Es gibt überhaupt kein separates rebootProgramm.
- Ignorieren Sie die Anweisungen,
haltoder rebootrufen Sie ein shutdownProgramm mit Befehlszeilenargumenten auf. Sie sind auch nicht wahr mit systemd. Es gibt überhaupt kein separates shutdownProgramm.
Jedes Systemverwaltungs-Toolset verfügt über eine Version dieser Dienstprogramme. systemd, Emporkömmling, nosh , van Smoorenburg initund BSD inithaben alle ihre eigenen halt, poweroffund so weiter. An jedem sind ihre Mechaniken etwas unterschiedlich. So sind ihre Manualseiten.
Im systemd Toolset halt, poweroff,reboot , telinit, und shutdownsind 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 systemctlManpage (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.specialManpage (8) aufgeführt.
Die Diagramme auf der bootupManpage (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.targetZiel umfasst , sodass Dienste beschrieben werden, die vor dem Herunterfahren von beendet werden müssen sie in Konflikt mit dem shutdown.targetZiel haben.
systemctlversucht, Anforderungen an zu senden, systemd-logindwenn der anrufende Benutzer nicht der Superuser ist. Es werden auch verzögerte Abschaltungen an übergeben systemd-shutdownd. Und einige Shorthands lösen wallBenachrichtigungen 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 systemctlProgramms.
Anmerkungen:
- Das traditionelle Verhalten von Optionen ohne Option
shutdown nowbestand 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 shutdownBefehl 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.targetdefault.targetsystemctl
- 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
--forceOption, die halt, rebootund poweroffBefehle ist die gleiche wie zu sagen --force --forcezu den systemctl halt, systemctl rebootund systemctl poweroffBefehle. Dadurch wird systemctlversucht, reboot()direkt anzurufen . Normalerweise wird nur versucht, Ziele zu isolieren.
telinitist nicht dasselbe wie init. Sie sind verschiedene Programme in der Systemwelt, wobei letzteres ein anderer Name für das systemdProgramm ist, nicht für das systemctlProgramm. Das systemdProgramm 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