GNU/Linux >> Znalost Linux >  >> Linux

Rozdíl mezi těmito příkazy pro svržení linuxového serveru?

Č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 nebo reboot vyvolat shutdown 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.
Související:Jak spustit příkaz, který zahrnuje přesměrování nebo potrubí pomocí sudo?

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 tyto runlevelN.target a default.target symbolické odkazy v souborovém systému, které popisují manuálové stránky. Výše uvedená mapování jsou pevně zapojena do systemctl 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žnost halt , reboot a poweroff příkazy je stejné jako říkat --force --force na systemctl halt , systemctl reboot a systemctl poweroff příkazy. Tím se vytvoří systemctl zkuste zavolat reboot() přímo. Normálně se pouze snaží izolovat cíle.
  • telinit není totéž jako init . Jsou to různé programy ve světě systemd, ten druhý je jiný název pro systemd program, nikoli pro systemctl 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íte init 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.

Linux
  1. Naučte se rozdíl mezi příkazy „su“ a „su -“ v Linuxu

  2. 3 Linuxové příkazy pro vypnutí systému a budete to moci udělat snadno

  3. Centos – Jaký je rozdíl mezi /usr/lib/systemd/system a /etc/systemd/system?

  1. Rozdíl mezi příkazy „su“ a „su -“ v Linuxu

  2. Jaký je rozdíl mezi voláním knihovny a voláním systému v Linuxu?

  3. Rozdíl mezi příkazy 'ifconfig' a ​​'ip'

  1. 3 Užitečné Linuxové příkazy pro systémové administrátory

  2. Rozdíl mezi příkazy zastavení a vypnutí?

  3. Jaký je rozdíl mezi normálním uživatelem a systémovým uživatelem?