Qual è la differenza tra reboot, init 6 e shutdown -r now?


Risposte:


83

Non c'è differenza in loro. Internamente fanno esattamente la stessa cosa:

  • rebootusa il shutdowncomando (con l'opzione -r). Il comando shutdown usato per uccidere tutti i processi in esecuzione, smontare tutti i file system e infine dice al kernel di emettere il comando di alimentazione ACPI. La fonte può essere trovata qui . Nelle distribuzioni precedenti il ​​comando di riavvio costringeva i processi a uscire emettendo il SIGKILLsegnale (ancora presente nelle fonti, può essere invocato con l' -fopzione), nelle distribuzioni più recenti il ​​valore predefinito è più elegante e amichevole init 1 -> shutdown -r. Questo assicura che i demoni si ripuliscano da soli prima dell'arresto.

  • init 6indica al initprocesso di arrestare tutti i processi / demoni generati come scritto nei file init (nell'ordine inverso in cui sono stati avviati) e infine invoca il shutdown -r nowcomando per riavviare la macchina

Oggi non c'è molta differenza poiché entrambi i comandi fanno esattamente lo stesso, e rispettano gli script di init utilizzati per avviare servizi / demoni invocando gli script di spegnimento per loro. Salvo reboot -f -r nowquanto indicato di seguito

C'è una piccola spiegazione presa dalle manpage del perché reboot -fnon è sicuro:

  -f, --force
    Forza arresto immediato, spegnimento, riavvio. Non contattare il sistema init.

Modificare:

Dimenticato di menzionare, nelle imminenti distribuzioni RHEL dovresti usare il nuovo systemctlcomando per eseguire lo spegnimento / riavvio. Come indicato nelle manpage di reboote shutdownsono "un comando legacy disponibile solo per compatibilità". e il systemctlmetodo sarà l'unico sicuro.


A volte il mio riavvio si blocca su SIGTERM, c'è un modo per sapere perché, e c'è anche un modo per timeout il riavvio, in modo che se impiega troppo tempo, forzerà un riavvio?
CMCDragonkai,

2
Quelle versioni di RHEL non sono più "imminenti". ☺ Come spiegato più dettagliatamente su unix.stackexchange.com/a/196014/5132 , su tali sistemi operativi e sistemi non c'è alcuna differenza. Non sono nemmeno programmi diversi.
JdeBP,

Hai sbagliato a dire init 1 -> shutdown -r?
deed02392,

Il tuo link è rotto.
Conoscenza del

8

L'arresto è preferibile perché ti consente di specificare il motivo dell'azione drastica, cosa che dovresti sempre fare. Il messaggio verrà registrato nei log per i posteri. Per esempio:

shutdown -r now 'Kernel upgrade requires reboot'

È inoltre possibile eseguire un riavvio pianificato , specificando qualcosa di diverso rispetto nowal tempo di riavvio:

shutdown -r 22:00 'Work around kernel memory leak'

Quindi i tuoi utenti riceveranno promemoria periodici per uscire man mano che il tempo si avvicina: il processo sarà più ordinato e professionale.


5

Sui unices tradizionali reboote shutdown -r nowsono comandi molto diversi. Nell'uso tipico, rebootè sicuro da usare solo in modalità utente singolo.

shutdown -r nowè il metodo canonico per arrestare diversi * nix e più sicuro da usare in generale ed è funzionalmente equivalente a init 6.

init (8) riavvia (8)


4

Su FreeBSD c'è una differenza tra reboote shutdown -r now. Dalla rebootpagina man:

Normalmente, l'utilità shutdown (8) viene utilizzata quando il sistema deve essere arrestato o riavviato, dando agli utenti un preavviso per il loro destino imminente e terminando in modo pulito programmi specifici.


1
Questa non è una domanda BSD, tuttavia, come evidenziato dal tag sulla domanda e dall'uso di un livello di esecuzione di System 5 in uno dei comandi. ☺
JdeBP

1
So che è una domanda Linux. Ho pensato che qualcuno potesse trovare utile sapere che su alcuni altri sistemi c'è una differenza.
Marián Černý,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.