Čtení „Jaký je rozdíl mezi příkazy Halt a Shutdown? , Obecně mám představu, co dělá příkaz shutdown, s volbami -h/-r nebo bez nich.
Příkaz „halt“ provede vypnutí systému pro spuštění úrovně 0
systému.Příkaz „shutdown“ provede vypnutí systému do úrovně běhu
1 bez příkazu -h nebo -r.
Co příkaz „poweroff“ přejde do úrovně běhu 0 nebo 1?
Je toto jediný hlavní rozdíl mezi těmito třemi příkazy?
Přijatá odpověď:
A teď odpověď systemd.
Podle štítku ve vaší otázce používáte Red Hat Enterprise Linux. Od verze 7 se používá systemd. Žádná z ostatních odpovědí není správná pro svět systemd; dokonce ani některé z předpokladů ve vaší otázce.
- Zapomeňte na úrovně běhu; existují, ale pouze jako podložky kompatibility. Dokumentace systemd uvádí, že koncept je „zastaralý“. Pokud se tyto věci začínáte učit na operačním systému systemd, nezačínejte tam.
- Zapomeňte na manuálovou stránku, kterou citoval marcelm; vůbec nepochází ze správné sady nástrojů a je to popis příkazu jiné sady nástrojů, nesprávný pro systemd. Je to ten pro
halt
příkaz z van Smoorenburg „System 5“init
služby. - Ignorujte příkazy
/sbin/halt
je symbolický odkaz na/sbin/reboot
; to není pravda se systemd. Neexistuje žádný samostatnýreboot
program vůbec. - Ignorujte příkazy, které
halt
neboreboot
vyvolatshutdown
program s argumenty příkazového řádku; nejsou také pravdivé pro systemd. Neexistuje žádné samostatnéshutdown
program vůbec.
Každá sada nástrojů pro správu systému má svou verzi těchto nástrojů. systemd, upstart, nosh, van Smoorenburg init
a BSD init
všechny mají svůj vlastní halt
, poweroff
, a tak dále. Na každém se jejich mechanika mírně liší. Stejně tak jejich manuálové stránky.
V sadě nástrojů systemd halt
,poweroff
,reboot
, telinit
a shutdown
jsou vše symbolické odkazy na /bin/systemctl
. Jsou to všichni shims zpětné kompatibility, což jsou jednoduše zkratky pro vyvolání primárního rozhraní příkazového řádku systemd:systemctl
. Všechny mapují (a ve skutečnosti jsou) ke stejnému jedinému program. (Podle konvence mu shell říká, kterým jménem byl vyvolán.)
cíle, nikoli úrovně běhu
Většina z těchto příkazů jsou zkratky pro sdělování systemd pomocí systemctl
, izolovat konkrétní cíl . Izolace je vysvětlena v systemctl
manuálová stránka (q.v.), ale může být pro účely této odpovědi chápána jako spuštění cíle a zastavení ostatních. Standardní cíle používané v systemd jsou uvedeny na systemd.special
(8) manuálová stránka.
Diagramy při bootup
(7) manuálová stránka v sadě nástrojů systemd, zejména ta poslední, ukazuje, že existují tři „konečné“ cíle, které jsou zde relevantní:
halt.target
— Jakmile systém dosáhne stavu úplné izolace tohoto cíle, zavoláreboot(RB_HALT_SYSTEM)
systémové volání. Jádro se pokusilo vstoupit do programu pro monitorování ROM nebo jednoduše zastavilo CPU (pomocí jakéhokoli vhodného mechanismu).reboot.target
— Jakmile systém dosáhne stavu úplné izolace tohoto cíle, zavoláreboot(RB_AUTOBOOT)
systémové volání (nebo ekvivalent s příkazovým řádkem magic). Jádro se pokusí spustit restart.poweroff.target
— Jakmile systém dosáhne stavu úplné izolace tohoto cíle, zavoláreboot(RB_POWER_OFF)
systémové volání. Pokud to bude možné, jádro se pokusí odpojit napájení systému.
Tyto jsou věci, na které byste měli myslet v konečném stavu systému, nikoli na spouštění úrovní. Všimněte si z diagramu, že samotný cílový systém systemd kóduje věci, které jsou v jiných systémech spíše implicitní než explicitní:jako je představa, že každý z těchto konečných cílů zahrnuje shutdown.target
cíl, takže jeden popisuje služby, které musí být zastaveny před vypnutím tím, že jsou v konfliktu shutdown.target
cíl.
systemctl
se pokusí odeslat požadavky na systemd-logind
když volající uživatel není superuživatel. Také předává zpožděná vypnutí do systemd-shutdownd
. A některé zkratky spouštějí wall
oznámení. Pomineme-li tyto složitosti, které by tuto odpověď několikrát prodloužily, za předpokladu, že jste aktuálně superuživatel a nepožadujete naplánovanou akci:
systemctl isolate halt.target
má zkratky:shutdown -H now
systemctl halt
- prostý bez ozdob
halt
systemctl isolate reboot.target
má zkratky:shutdown -r now
telinit 6
systemctl reboot
- prostý bez ozdob
reboot
systemctl isolate poweroff.target
má zkratky:shutdown -P now
telinit 0
shutdown now
systemctl poweroff
- prostý bez ozdob
shutdown
systemctl isolate rescue.target
má zkratky:telinit 1
systemctl rescue
systemctl isolate multi-user.target
má zkratky:telinit 2
telinit 3
telinit 4
systemctl isolate graphical.target
má zkratku:telinit 5
Po analýze různých různých syntaxí příkazového řádku všechny nakonec skončí ve stejných cestách kódu uvnitř systemctl
program.
Poznámky:
- Tradiční chování bez možnosti
shutdown now
došlo k přepnutí do režimu pro jednoho uživatele . To není případ systemd.rescue.target
— režim pro jednoho uživatele byl přejmenován na režim záchrany v systemd — není dosažitelné pomocíshutdown
příkaz. telinit
skutečně zcela ignorujte všechny tytorunlevelN.target
adefault.target
symbolické odkazy v souborovém systému, které popisují manuálové stránky. Výše uvedená mapování jsou pevně zapojena dosystemctl
program v tabulce.- systemd nemá žádnou představu o aktuální úrovni běhu . Činnost těchto příkazů není podmíněna žádným „pokud jste na úrovni běhu N “.
--force
možnosthalt
,reboot
apoweroff
příkazy je stejné jako říkat--force --force
nasystemctl halt
,systemctl reboot
asystemctl poweroff
příkazy. Tím se vytvořísystemctl
zkuste zavolatreboot()
přímo. Normálně se pouze snaží izolovat cíle.telinit
není totéž jakoinit
. Jsou to různé programy ve světě systemd, ten druhý je jiný název prosystemd
program, nikoli prosystemctl
program.systemd
program není nutně zkompilován s van Smoorenburgovou kompatibilitou a na některých operačních systémech systemd si stěžuje na nesprávné vyvolání, pokud se pokusíteinit N
.
Další čtení
- Existují nějaké dobré důvody pro zastavení systému bez přerušení napájení?
- Proč má `init 0` za následek “Excess Arguments” na instalaci Arch?
- Stephen Wadeley (2014). "8. Správa služeb pomocí systemd” Příručka správce systému Red Hat Enterprise Linux 7 . Red Hat.
- Lennart Poettering (2013-10-07).
systemctl
. systémové manuálové stránky. freedesktop.org. - Lennart Poettering (2013-10-07).
systemd.special
. systémové manuálové stránky. freedesktop.org. - Lennart Poettering (2013-10-07).
bootup
. systémové manuálové stránky. freedesktop.org. - Jonathan de Boyne Pollard (2018).
init
. průvodce nosh . Software.