E ora, la risposta di systemd.
Stai utilizzando, per il tag sulla tua domanda, Red Hat Enterprise Linux. Dalla versione 7, ha utilizzato systemd. Nessuna delle altre risposte è corretta per il mondo di systemd; e nemmeno alcuni dei presupposti della tua domanda.
- Dimentica i runlevel ; esistono, ma solo come spessori di compatibilità. La documentazione di systemd afferma che il concetto è "obsoleto". Se stai iniziando a imparare queste cose su un sistema operativo systemd, non iniziare da lì.
- Dimentica la pagina di manuale che Marcelm ha citato; non proviene affatto dal set di strumenti giusto ed è una descrizione del comando di un altro set di strumenti, errato per i systemd. È quello per il
haltcomando delle utility "System 5" di van Smoorenburg init.
- Ignora le affermazioni che
/sbin/haltsono un collegamento simbolico a /sbin/reboot; questo non è vero con systemd. Non esiste alcun rebootprogramma separato .
- Ignorate le dichiarazioni che
halto rebootinvocare un shutdownprogramma con gli argomenti della riga di comando; inoltre non sono veri con systemd. Non esiste alcun shutdownprogramma separato .
Ogni set di strumenti di gestione del sistema ha la sua versione di queste utility. systemd, upstart, gustare uno spuntino , van Smoorenburg init, e BSD inittutti hanno il loro halt, poweroffe così via. Su ciascuno la loro meccanica è leggermente diversa. Così sono le loro pagine di manuale.
Nel set di strumenti systemd halt, poweroff,reboot , telinit, e shutdownsono tutti collegamenti simbolici a /bin/systemctl. Sono tutti spessori compatibilità all'indietro, che sono semplicemente abbreviazioni per invocare CLI primario di systemd: systemctl. Tutti mappano (e in effetti lo sono) lo stesso singolo programma. (Per convenzione, la shell gli dice da quale nome è stata invocata.)
obiettivi, non runlevel
La maggior parte di questi comandi è una scorciatoia per dire a systemd, usando systemctl, di isolare un obiettivo particolare . L'isolamento è spiegato nella systemctlpagina del manuale (qv), ma può essere, ai fini di questa risposta, pensato come avviare un obiettivo e fermarne altri. I target standard utilizzati in systemd sono elencati nella systemd.specialpagina del manuale (8).
I diagrammi sulla bootup(7) pagina di manuale nel set di strumenti di systemd, in particolare l'ultimo, mostrano che ci sono tre target "finali" che sono rilevanti qui:
halt.target- Una volta che il sistema ha raggiunto lo stato di isolamento completo di questa destinazione, avrà chiamato la reboot(RB_HALT_SYSTEM)chiamata di sistema. Il kernel avrà tentato di accedere a un programma di monitoraggio ROM o semplicemente arrestato la CPU (utilizzando qualsiasi meccanismo appropriato per farlo).
reboot.target- Una volta che il sistema ha raggiunto lo stato di isolamento completo di questo bersaglio, avrà chiamato la reboot(RB_AUTOBOOT)chiamata di sistema (o l'equivalente con la riga di comando magica). Il kernel avrà tentato di avviare un riavvio.
poweroff.target- Una volta che il sistema ha raggiunto lo stato di isolamento completo di questa destinazione, avrà chiamato la reboot(RB_POWER_OFF)chiamata di sistema. Il kernel avrà tentato di rimuovere l'alimentazione dal sistema, se possibile.
Queste sono le cose a cui dovresti pensare come afferma il sistema finale, non eseguire i livelli. Si noti dal diagramma che il sistema target di sistema stesso codifica cose che sono, in altri sistemi, implicite piuttosto che esplicite: come l'idea che ciascuno di questi obiettivi finali racchiuda l' shutdown.targetobiettivo, in modo che uno descriva i servizi che devono essere arrestati prima dell'arresto da facendoli entrare in conflitto con il shutdown.targetbersaglio.
systemctltenta di inviare richieste a systemd-logindquando l'utente chiamante non è il superutente. Passa anche a arresti ritardati a systemd-shutdownd. E alcuni shorthands attivano le wallnotifiche. A parte quelle complessità, che renderebbero questa risposta più volte più lunga, supponendo che tu sia attualmente il superutente e non richiedendo un'azione programmata:
systemctl isolate halt.target ha le scorciatoie:
shutdown -H now
systemctl halt
- semplice disadorno
halt
systemctl isolate reboot.target ha le scorciatoie:
shutdown -r now
telinit 6
systemctl reboot
- semplice disadorno
reboot
systemctl isolate poweroff.target ha le scorciatoie:
shutdown -P now
telinit 0
shutdown now
systemctl poweroff
- semplice disadorno
poweroff
systemctl isolate rescue.target ha le scorciatoie:
telinit 1
systemctl rescue
systemctl isolate multi-user.target ha le scorciatoie:
telinit 2
telinit 3
telinit 4
systemctl isolate graphical.target ha la scorciatoia:
Dopo aver analizzato le diverse sintassi della riga di comando, queste alla fine finiscono negli stessi percorsi di codice all'interno del systemctlprogramma.
Appunti:
- Il comportamento tradizionale di opzione-less
shutdown nowè stato quello di passare alla modalità utente singolo . Questo non è il caso di systemd. rescue.target- la modalità utente singolo viene rinominata modalità di salvataggio in systemd - non è raggiungibile con il shutdowncomando.
telinit in realtà non del tutto ignorare tutti coloro e collegamenti simbolici nel filesystem che le pagine di manuale descrivono. I mapping precedentemente indicati sono cablati nel programma, in una tabella.runlevelN.targetdefault.targetsystemctl
- systemd non ha alcuna nozione di un livello di esecuzione corrente . L'operazione di questi comandi non è subordinata a nessun "se si è nel livello di esecuzione N ".
- L'
--forceopzione per la halt, reboote poweroffcomandi è lo stesso che dire --force --forceai systemctl halt, systemctl reboote systemctl poweroffcomandi. Questo fa systemctlprovare a chiamare reboot()direttamente. Normalmente cerca solo di isolare gli obiettivi.
telinitnon è lo stesso di init. Sono programmi diversi nel mondo del sistema e quest'ultimo è un altro nome per il systemdprogramma, non per il systemctlprogramma. Il systemdprogramma non è necessariamente compilato con alcuna compatibilità di van Smoorenburg e su alcuni sistemi operativi e sistemi si lamenta di essere invocato in modo errato se si tenta .init N
Ulteriori letture