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
halt
comando delle utility "System 5" di van Smoorenburg init
.
- Ignora le affermazioni che
/sbin/halt
sono un collegamento simbolico a /sbin/reboot
; questo non è vero con systemd. Non esiste alcun reboot
programma separato .
- Ignorate le dichiarazioni che
halt
o reboot
invocare un shutdown
programma con gli argomenti della riga di comando; inoltre non sono veri con systemd. Non esiste alcun shutdown
programma 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 init
tutti hanno il loro halt
, poweroff
e 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 shutdown
sono 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 systemctl
pagina 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.special
pagina 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.target
obiettivo, in modo che uno descriva i servizi che devono essere arrestati prima dell'arresto da facendoli entrare in conflitto con il shutdown.target
bersaglio.
systemctl
tenta di inviare richieste a systemd-logind
quando l'utente chiamante non è il superutente. Passa anche a arresti ritardati a systemd-shutdownd
. E alcuni shorthands attivano le wall
notifiche. 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 systemctl
programma.
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 shutdown
comando.
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.target
default.target
systemctl
- 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'
--force
opzione per la halt
, reboot
e poweroff
comandi è lo stesso che dire --force --force
ai systemctl halt
, systemctl reboot
e systemctl poweroff
comandi. Questo fa systemctl
provare a chiamare reboot()
direttamente. Normalmente cerca solo di isolare gli obiettivi.
telinit
non è lo stesso di init
. Sono programmi diversi nel mondo del sistema e quest'ultimo è un altro nome per il systemd
programma, non per il systemctl
programma. Il systemd
programma 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