it-swarm.it

Qual è la differenza tra i comandi Halt e Shutdown?

Qual è la differenza tra i comandi halt e shutdown?

100
wassimans

Generalmente, si usa shutdown command . Consente un ritardo e un messaggio di avviso prima dell'arresto o del riavvio, che è importante per l'amministrazione del sistema di server Shell multiutente; può fornire agli utenti un preavviso dei tempi di fermo.

Pertanto, il comando shutdown deve essere usato in questo modo per arrestare/spegnere immediatamente il computer (almeno su Linux e FreeBSD):

shutdown -h now

O per riavviarlo con un avviso personalizzato di 30 minuti di anticipo:

shutdown -r +30 "Planned software upgrades"

Dopo il ritardo, shutdown indica init per passare al runlevel 0 (arresto) o 6 (riavvio). (Nota che omettendo -h o -r farà passare il sistema in modalità utente singolo (runlevel 1), che uccide la maggior parte dei processi del sistema ma non lo ferma; consente comunque all'amministratore di rimanere connesso come root.)

Una volta che i processi di sistema sono stati interrotti e i filesystem sono stati smontati, il sistema si arresta/si spegne o si riavvia automaticamente. Questo viene fatto usando il comando halt o reboot , che sincronizza le modifiche ai dischi e quindi esegue l'arresto/spegnimento o il riavvio.

Su Linux, se halt o reboot viene eseguito quando il sistema non ha già avviato il processo di spegnimento, invocherà automaticamente il comando shutdown anziché eseguire direttamente l'azione prevista. Tuttavia, su sistemi come FreeBSD , questi comandi prima registrano l'azione in wtmp e poi immediatamente eseguono l'arresto/riavvio da soli, senza prima uccidere i processi o smontare i filesystem.

80
PleaseStand

Il passato

Negli anni '80, i BSD avevano halt, reboot e shutdown. System 5 UNIX aveva un set di strumenti di compatibilità BSD. Ma nativamente aveva il suo comando shutdown diverso; e non aveva affatto halt o reboot. (Alcune varianti di System 5 avevano cose come SCO XENIX's haltsys.)

I comandi BSD halt e reboot erano di basso livello, drastici e immediati. Il modo premuroso per spegnere un sistema BSD era il comando shutdown, che faceva tutte le cose che ci si aspetta che accadano: wall messaggi agli utenti, servizi uccisi con grazia, voci di registro scritte, accessi disabilitati e così via.

Mentre i BSD erano in gran parte il luogo in cui la saggezza ricevuta aveva origine che "shutdown execs halt/reboot" e che questi ultimi dovevano essere usati con cura; era il mondo di System 5 in cui le persone hanno imparato l'abitudine contraria che halt/reboot erano solo utili scorciatoie e niente di più: /usr/ucb/halt, dal "Pacchetto di compatibilità BSD", era non differisce in effetti da shutdown -h. Entrambi hanno finito per fare init 0.

Ulteriori letture

Oggi

Al giorno d'oggi, abbiamo una gamma di possibili set di strumenti di gestione del sistema. I BSD hanno ancora il loro set di strumenti, sebbene purificato da ogni possibile AT & Tisms negli anni '90. Miquel van Smoorenburg nel 1992 (ri) scrisse un Linux init + rc e i loro strumenti associati, che la gente ora chiama "System 5 init", anche se in realtà non lo è il software di UNIX System 5 (e non è solo init). Ci sono anche systemd , pstart e nosh , ognuno dei quali ha le proprie implementazioni di halt, reboot, fasthalt, fastboot e così via.

Anche i set di strumenti sono cresciuti e cambiati. Ora c'è un comando poweroff, non presente nei sistemi operativi degli anni '80 perché le unità di elaborazione centrale sulla maggior parte delle macchine contemporanee non avevano modo di controllare i loro alimentatori. I set di strumenti Linux in particolare hanno acquisito i comandi BSD; ma come gli strumenti di compatibilità BSD su UNIX System 5, non sono esatti workalikes e le cose sono state ampiamente appiattite.

Questo appiattimento ci ha portato al punto in cui halt e shutdown sono principalmente uguali. Ma i dettagli esatti variano da set di strumenti a set di strumenti e la meccanica di ciascun set di strumenti è leggermente diversa.

Ci ha anche portato nella posizione leggermente imbarazzante in cui questo set di comandi è diventato così festoso con opzioni di compatibilità che ora consente alle persone di dare ai computer istruzioni auto-contraddittorie come reboot --halt E poweroff --reboot, Come I annotato nella pagina di manuale per i comandi nosh halt, fasthalt, reboot, fastboot e poweroff. ☺

Il set di strumenti di systemd

halt, reboot, poweroff, telinit e shutdown sono tutto un programma . In realtà è il programma systemctl di systemd. Dispone di diversi parser della riga di comando per le varie sintassi della riga di comando di tali comandi, oltre che dei propri, ma in seguito viene in gran parte incanalato in un percorso di codice internamente. Non c'è alcuna differenza tra l'uso di halt e le sue opzioni di comando per attivare un'azione e l'uso di shutdown e le sue opzioni di comando per attivare la stessa azione.

systemd non considera modalità di salvataggio (che è ciò che le persone systemd hanno rinominato modalità utente singolo ) essere uno stato di sistema di spegnimento e non è raggiungibile con nessuno di questi comandi. Senza opzioni shutdown now È uguale a poweroff.

Ulteriori letture:

I BSD

I BSD mantengono in gran parte la loro semantica degli anni '80. halt e shutdown sono quindi molto non equivalenti nei loro set di strumenti. halt e reboot sono un singolo programma; e sono ancora di basso livello, immediati e drastici. Considerando che shutdown e poweroff, anche un singolo programma, fanno tutte le cose premurose come l'arresto programmato, scrivendo wall messaggi, registrando azioni, disabilitando l'accesso e così via.

Nei set di strumenti BSD, shutdown/poweroff tradizionalmente finiva per invocare halt/reboot per applicare il cambiamento di stato finale del sistema. Il (spesso al giorno d'oggi errato) ha ricevuto la saggezza secondo cui "shutdown execs halt/reboot" in realtà continua a detenere NetBSD e OpenBSD. Ma su FreeBSD/TrueOS/DragonFlyBSD è solo il caso se si utilizza l'opzione -o. Su questi BSD, entrambi di questi programmi normalmente indicano lo stato finale del sistema cambia inviando vari segnali (INT, USR1 e USR2) al processo n. 1. init esegue tutta la gestione dello stato del sistema su questi sistemi.

Su tutti loro, l'opzione shutdown now Senza opzioni non equivale a nessuno dei halt, reboot o poweroff. Passa alla modalità utente singolo BSD , da cui è possibile passare indietro a modalità multiutente .

Ulteriori letture:

Il set di strumenti nosh

Nel set di strumenti di gestione del sistema nosh, halt, fasthalt, poweroff, fastpoweroff, reboot e fastboot sono tutto un programma. È uno shim di retrocompatibilità che normalmente si lega semplicemente a shutdown, il opposto della saggezza ricevuta. L'opzione --force Fa invece la catena a system-control.

Quindi non c'è alcuna differenza (assente --force) Tra il comando halt e il comando shutdown (con l'opzione equivalente) in questo set di strumenti, poiché questo set di "BSD/System 5 i comandi di compatibilità "è semplicemente un sottile strato di spessore sopra la parte superiore di shutdown.

Ulteriori letture:

Il set di strumenti upstart

Come con nosh, nel set di strumenti di gestione del sistema upstart si applica l'opposto della saggezza BSD ricevuta. halt, reboot e poweroff sono tutti un programma, che normalmente si collega a shutdown; a meno che non venga utilizzata l'opzione --force, che fa sì che la chiamata di sistema reboot() stessa.

Quindi, di nuovo, non c'è alcuna differenza (assente --force) Tra il comando halt e il comando shutdown (con l'opzione equivalente) in questo set di strumenti. Inoltre, l'opzione shutdown now Senza opzioni (che nessuna di halt, reboot o poweroff può finire per invocare poiché tutte impostano le opzioni) porta il sistema in modalità utente singolo piuttosto che spegnerlo.

Ulteriori letture:

Il set di strumenti _ System $ 5 init + rc

Ancora una volta, in questo set di strumenti si applica l'opposto della saggezza BSD ricevuta e halt e reboot si concatenano semplicemente a shutdown - a meno che il sistema non sia già nello spegnimento o interrompa i "livelli di esecuzione" ", nel qual caso questi comandi eseguono effettivamente il cambio di stato finale del sistema. shutdown a sua volta incatena a init.

Quindi, di nuovo, non c'è alcuna differenza (a meno che il sistema non sia già in gran parte spento) tra halt e shutdown perché il primo invoca solo il secondo. E sì, ancora una volta, l'opzione shutdown now (Che nessuna di halt, reboot o poweroff può finire per invocare tutte le opzioni impostate) porta il sistema in modalità utente singolo invece di spegnerlo.

52
JdeBP

Sospetto che ciò dipenda in qualche modo dalla versione di UNIX/Linux che stai utilizzando. Su Centos (e mi aspetto che altri Linux moderni) arrestino l'arresto delle chiamate (a condizione che tu non sia runlevel 0 o 6), quindi il tuo sistema verrà spento in modo pulito. Su Solaris 10 l'arresto è più brutale, svuota semplicemente la cache del disco e spegne il sistema - non viene fatto alcun tentativo di eseguire script o arrestare smf servizi.

11
user591

Per coloro che usano AWS EC2: su AWS shutdownarresta un'istanza, quando halttermina esso.

3
dveim

In Linux, "halt" e "reboot" sono alias del comando shutdown - shutdown -h e shutdown -r rispettivamente. L'arresto di Bareword presuppone generalmente -h.

0
Shadur