GNU/Linux >> Znalost Linux >  >> Linux

Jak okamžitě vypnout počítač (1 až 5 sekund) bez použití fyzického vypínače/zásuvky?

sudo shutdown -h now

Nedoporučuji dělat následující, pokud vás k tomu nenutí opravdu zvláštní důvody:

kill -SEGV 1   # should generate a core dumps and kernel panic
kill -ABRT 1   # should generate a core dumps and kernel panic
kill -9 1      # On old systems worked nowadays not

Je to drsné, brutální a dá se to považovat za blízký ekvivalent odpojení napájecího kabelu ...

Správným způsobem je shutdown -h now s sudo dříve, když je potřeba.
Možná bych měl říct zákonný způsob; viz níže nebo lépe tl;dr.

Ještě pár slov , neboli Příběh, kapitola I
Na začátku byl init a bude až do úplného konce.

Celý Linux závisí na láskyplné péči z init . Nicméně a ne bez určité dávky nevděku, nastala doba, kdy dobrý pán root uživatele může zradit tuto lásku a najednou kill init s nezpochybnitelným (-9 ) objednat.
(Kniha etikety předepisuje pro uživatele hrabat, vévodů a markýz vyvolat před sudo ).

Pak někteří čarodějové vytvořili kouzlo na ochranu init (z Knihy man 2 init )

Jediné signály, které lze odeslat do procesu ID 1, procesu init, jsou ty, pro které má init explicitně nainstalované ovladače signálů. To se provádí, aby se zajistilo, že systém nebude náhodně stažen.

že init zvládne 1 HUP 6 ABRT 11 SEGV 15 TERM 30 PWR 2 INT 10 USR1 14 ALRM 17 CHLD 32)
Takže dobrý pán uživatel root dozvědět se novinky a změnit příkaz v kill -ABRT 1 nebo kill -SEGV 1 které obvykle generují paniku jádra a výpis jádra.

Funguje to, protože init je prvním procesem, který běží a má PID číslo 1.

To je nebezpečné, nemoudré a máte pocit, že je to zvěstovatel zlého znamení a prokletí, ale pokud nemůžete materiálně nasadit ruce a odpojit to...

Prokletí :nezapíše do logu, nezabije všechny procesy a nepočká na jejich konec, nezapíše na HDD správně aktualizovat inody ani neodpojí souborové systémy; nevadí, že to ušetří možnosti grafických oken a historie shellu a mnoho dalších, které přesahují naši představivost...jak jsme řekli blízký ekvivalent odpojení napájecí šňůry nebo baterie v případě notebooku.

Správný způsob

Zákonné (správný) způsob je použít shutdown

sudo shutdown -h now

vypnutí zajistí, aby byl systém bezpečně vyřazen z provozu. Všichni přihlášení uživatelé jsou upozorněni, že systém upadá a...

ale s -h now nebudou mít dost času udělat tolik...

Ještě pár slov , neboli Příběh, Kapitola II
Kdysi bylo nad unixovými lidmi cítit z nebe nějaké logické kroky:

Jakmile jsou systémové procesy zabity a souborové systémy byly odpojeny, systém se zastaví/vypne nebo se automaticky restartuje. To se provádí pomocí příkazu halt nebo reboot, který synchronizuje změny na disky a poté provede skutečné zastavení/vypnutí nebo restart.

V dnešní době už skutečně nedůvěřujeme existenci tří Moirai světa Linux , reboot ,poweroff a halt :moderní věda z ls -l $(which poweroff halt reboot) a jeden z man reboot , šíří nové světlo na tento temný věk a odhaluje nám, že existuje pouze jeden skutečný příkaz, který analyzuje všechny jejich možnosti, takže můžeme konečně svobodně žádat o akce, které jsou v rozporu se jmény jejich příkazů! (halt -p nebo reboot -p pro poweroff , shutdown -r pro reboot ...)

Nyní, když se vše zdálo být jasné a útulné pro všechny, tvrdí se, že v podsvětí ze sady nástrojů systemd byla provedena revoluce, aniž by o tom věděl celý svět . Díky armádě podložek se zpětnou kompatibilitou vůbec jsme si nevšimli, že restartování, vypnutí, zastavení a dokonce i telinit a vypnutí jsou již vázány na nový král systemctl. Poslechněte si prosím celý příběh z původního hlasu JdeBP The Bard, protože už nemám dech.

Pokud jste stoupenci kultu Ubuntu, můžete si být ještě chvíli vědomi všech těchto tvrzení.

Střední Země halt -f , init , telinit , systemctl
Hledání řešení rychleji než to správné, ale také moudré.

systemctl --force --force poweroff  # the most close to kill -9 1 
systemctl --force poweroff          # rough but still safe
sudo halt -f                                       # rough
sudo telinit 0        # or 6                       # safe
kill -SIGINT 1        # cause reboot   as the reboot command
kill -SIGRTMIN+4 1    # cause shutdown as the halt command

Ať už jste pod systemd nebo ne, měli byste být schopni zastavit počítač bez vyvolání všech správných procedur vypnutí (a tedy rychlejší):

  1. halt -f :zadání možnosti -f (Všimněte si, že potřebujete -f abyste se vyhnuli proceduře vypnutí) pomocí výše uvedeného příkazu s sudo poweroff -f nebo možná dokonce s sudo reboot -f -h .Opravdu můžeme číst z man reboot (a ekvivalenty) o nutnosti zadat volbu -f abyste se vyhnuli volání vypnutí:

    Při volání pomocí --force nebo když je v úrovni běhu 0 nebo 6, tento nástroj vyvolá samotné systémové volání reboot(2) (s předáním argumentu REBOOTCOMMAND) a přímo restartuje systém .

    Jinak to jednoduše vyvolá nástroj shutdown(8) s příslušnými argumenty bez předání argumentu REBOOTCOMMAND.

    -f, --force
    Nevyvolá vypnutí(8) a místo toho provede skutečnou akci, kterou byste očekávali od názvu .

  2. Navíc můžete použít telinit (nebo init přímo)

    sudo telinit 0    # or 6
    

    říct init, aby změnil úroveň běhu... ale pokud ano, proč ho nezabít přímo?

  3. Pod systemd můžete použít nerozumnou dvojitou volbu --force --force

    systemctl --force --force poweroff  
    

    Čtení z manuálu systemctl

    -f, --force
    Při použití s ​​povolením přepíše všechny existující konfliktní symbolické odkazy.
    Při použití s ​​halt , poweroff , reboot nebo kexec, proveďte vybranou operaci bez vypnutí všech jednotek. Všechny procesy však budou násilně zabity a všechny systémy souborů budou odpojeny nebo znovu připojeny pouze pro čtení. Jedná se tedy o drastickou, ale relativně bezpečnou možnost požádat o okamžitý restart. Pokud je pro tyto operace zadáno --force dvakrát, budou provedeny okamžitě bez ukončení jakýchkoli procesů nebo odpojení jakéhokoli souborového systému. Varování:Zadání --force dvakrát u kterékoli z těchto operací může vést ke ztrátě dat.

Ps> Inspirujte se variantami z ocasu JdeBP The Bard .


Počítač můžete okamžitě vypnout bez synchronizace disků zápisem "o" do /proc/sysrq-trigger jako root.

Jako shell skript by to vypadalo nějak takto

#!/bin/sh
echo o >/proc/sysrq-trigger

Pokud máte oprávnění k /proc/sysrq-trigger, nemusíte je povolovat prostřednictvím sysctl. Tato možnost ovlivňuje pouze spouštění pomocí klávesnice.

Nedoporučuji to dělat na počítači s jakýmkoli souborovým systémem, který chcete číst později.

Používám to na Google Compute Engine k porážce šablonovaných instancí těsně před desetiminutovou hranicí, abych maximalizoval nákladovou efektivitu klastrových úloh, funguje to skvěle.


Linux
  1. Jak čekat na restart serveru pomocí Ansible?

  2. Jak zjistit, zda používám systemd na Linuxu?

  3. Jak obnovit 70-persistent-net.rules bez restartu?

  1. Jak zakázat příkazy vypnutí a restartu v Linuxu

  2. Jak znovu načíst pravidla Udev bez restartu?

  3. Jak odstranit soubor bez použití rm?

  1. Jak vytvořit fyzický svazek v Linuxu pomocí LVM

  2. Jak vypnout nebo restartovat Linux pomocí příkazového řádku

  3. Linux – Jak obnovit 70-persistent-net.rules bez restartu?