GNU/Linux >> Linux Esercitazione >  >> Linux

Come spegnere un computer all'istante (da 1 a 5 secondi) senza utilizzare un interruttore/presa fisica?

sudo shutdown -h now

Non suggerisco di fare quanto segue se non sei obbligato da ragioni davvero particolari:

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

È rozzo, brutale e può essere considerato uno stretto equivalente di scollegare il cavo di alimentazione ...

Il modo corretto è shutdown -h now con sudo prima quando necessario.
Forse dovrei dire in modo legale; vedi sotto o meglio tl;dr.

Qualche parola in più , ovvero La storia, capitolo I
In principio era l'init e lo sarà fino alla fine.

L'intero Linux dipende dalla cura amorevole di init . Tuttavia, e non senza una certa dose di ingratitudine, c'è stato un tempo in cui il buon Dio utente root può tradire questo amore e improvvisamente kill init con un incontrovertibile (-9 ) ordine.
(Il Libro del Galateo prescrive per gli utenti di conti, duchi e marchesi da invocare prima di un sudo ).

Poi alcuni maghi crearono un incantesimo per proteggere init (dal Libro di man 2 init )

Gli unici segnali che possono essere inviati al processo ID 1, il processo init, sono quelli per i quali init ha esplicitamente installato dei gestori di segnale. Questo viene fatto per garantire che il sistema non venga disattivato accidentalmente.

che init gestirà 1 HUP 6 ABRT 11 SEGV 15 TERM 30 PWR 2 INT 10 USR1 14 ALRM 17 CHLD 32)
Quindi il buon Dio utente root impara le novità e cambia il comando in kill -ABRT 1 o kill -SEGV 1 che di solito generano un kernel panic e un core dump.

Funziona perché init è il primo processo da eseguire e prende il numero PID 1 .

Questo è pericoloso, imprudente e senti che è foriero di malaugurio e maledizione, ma se non puoi materialmente metterci le mani sopra e staccare la spina...

La maledizione :non scriverà sul log, non ucciderà tutti i processi e non aspetterà la loro fine, non scriverà sull'HDD aggiornando correttamente gli inode né smonterà i filesystem; non importa nemmeno che salverà le opzioni delle finestre grafiche e le cronologie della shell, e molte altre oltre la nostra immaginazione...come abbiamo detto un vicino equivalente di scollegare il cavo di alimentazione, o la batteria se un laptop.

Nel modo corretto

Il lecito (corretto) è usare shutdown

sudo shutdown -h now

l'arresto fa in modo che il sistema venga disattivato in modo sicuro. Tutti gli utenti che hanno effettuato l'accesso vengono avvisati che il sistema sta andando giù e...

ma con -h now non avranno abbastanza tempo per fare così tanto...

Qualche parola in più , ovvero La storia, capitolo II
C'erano una volta alcuni passi logici sentiti dal cielo sopra la gente unix:

Una volta terminati i processi di sistema e smontati i file system, il sistema si arresta/si spegne o si riavvia automaticamente. Questo viene fatto utilizzando il comando halt o reboot, che sincronizza le modifiche ai dischi e quindi esegue l'effettivo arresto/spegnimento o riavvio.

Infatti, al giorno d'oggi, non ci fidiamo più dell'esistenza delle tre Moire del mondo Linux , reboot ,poweroff e halt :la scienza moderna di ls -l $(which poweroff halt reboot) e quello di man reboot , diffonde nuova luce su questa epoca oscura e ci rivela che esiste un solo vero comando che analizza tutte le loro opzioni in modo che siamo finalmente liberi di chiedere azioni che contraddicono i nomi dei loro comandi! (halt -p o reboot -p per poweroff , shutdown -r per reboot ...)

Ora che tutto sembrava essere chiaro e accogliente per tutti, le voci lo affermano nel mondo sotterraneo del set di strumenti systemd è stata compiuta una rivoluzione che ha lasciato all'oscuro l'intero sopramondo . Grazie a un esercito di shim retrocompatibili non ci siamo accorti affatto che reboot, poweroff, halt e persino telinit e shutdown sono tutti già limitati al nuovo king systemctl . Per favore ascolta tutta la storia dalla voce originale di JdeBP The Bard perché non ho più fiato.

Se sei un seguace del culto di Ubuntu potresti rimanere a conoscenza per un po' di tutte queste affermazioni.

La Terra di mezzo di halt -f , init , telinit , systemctl
Ricerca di una soluzione più veloce di quella corretta ma altrettanto saggia.

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

Che tu sia sotto systemd o meno dovresti riuscire a fermare il computer senza invocare tutte le corrette procedure di spegnimento (e quindi più veloci):

  1. halt -f :specificando l'opzione -f (nota che hai bisogno di -f per evitare la procedura di spegnimento) con il comando precedente, con sudo poweroff -f o forse anche con sudo reboot -f -h .Infatti possiamo leggere da man reboot (ed equivalenti) sulla necessità di specificare l'opzione -f evitare di chiamare l'arresto:

    Quando chiamato con --force o quando nel runlevel 0 o 6, questo strumento invoca la stessa chiamata di sistema reboot(2) (con l'argomento REBOOTCOMMAND passato) e riavvia direttamente il sistema .

    Altrimenti questo richiama semplicemente lo strumento shutdown(8) con gli argomenti appropriati senza passare l'argomento REBOOTCOMMAND.

    -f, --force
    Non invoca shutdown(8) e invece esegue l'azione effettiva che ti aspetteresti dal nome .

  2. Inoltre puoi usare telinit (o init direttamente)

    sudo telinit 0    # or 6
    

    per dire a init di cambiare runlevel... ma se è così perché non ucciderlo direttamente?

  3. Sotto systemd puoi usare la doppia opzione poco saggia --force --force

    systemctl --force --force poweroff  
    

    Leggendo dal manuale systemctl

    -f, --forza
    Se utilizzato con enable, sovrascrive eventuali collegamenti simbolici esistenti in conflitto.
    Se utilizzato con halt , poweroff , reboot o kexec, esegue l'operazione selezionata senza spegnere tutte le unità. Tuttavia, tutti i processi verranno terminati forzatamente e tutti i file system verranno smontati o rimontati in sola lettura. Questa è quindi un'opzione drastica ma relativamente sicura per richiedere un riavvio immediato. Se --force viene specificato due volte per queste operazioni, verranno eseguite immediatamente senza terminare alcun processo o smontare alcun file system. Avviso:specificare --force due volte con una qualsiasi di queste operazioni potrebbe causare la perdita di dati.

Ps> Prendi spunto sulle varianti dalla coda JdeBP The Bard .


Puoi spegnere immediatamente la macchina senza sincronizzare i dischi scrivendo "o" in /proc/sysrq-trigger come root.

Come script di shell sarebbe simile a

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

Se si dispone delle autorizzazioni su /proc/sysrq-trigger, non è necessario abilitarlo tramite sysctl. Questa opzione influisce solo sull'attivazione tramite tastiera.

Non consiglio di farlo su una macchina con qualsiasi filesystem che vuoi leggere in seguito.

Lo utilizzo su Google Compute Engine per abbattere le istanze basate su modelli appena prima dei dieci minuti per massimizzare l'efficacia in termini di costi dei lavori del cluster, funziona alla grande.


Linux
  1. Come disabilitare i comandi di spegnimento e riavvio in Linux

  2. Come creare un volume fisico in Linux usando LVM

  3. Come spegnere o riavviare Linux utilizzando la riga di comando

  4. Come attendere il riavvio del server utilizzando Ansible?

  5. Come rimuovere un file senza usare rm?

Come evitare l'arresto o il riavvio accidentale in Linux

Come passare automaticamente a una directory senza utilizzare il comando Cd in Linux

Come passare da un TTY all'altro senza utilizzare i tasti funzione in Linux

Come scaricare i pacchetti usando APT senza installarli

Come arrestare o riavviare Linux utilizzando la riga di comando

Come spegnere o riavviare Debian 11