Systemd è ancora a conoscenza dei runlevel?


17

Systemd ha ancora il concetto di runlevel? Ad esempio, è inutile usare telinit <number>?


2
Possibile duplicato del runlevel Change con systemd
Stephen Harris,

non conosco le risposte qui sotto, ma in RHEL / Centos 7.6 init 1o init 3o init 5o init 6o init 0o runlevelancora si comportano come sempre, ed è tutto ciò che mi interessa. Molto più facile sintassi poisystemctl blabla blabla.blabla
ron

Risposte:


14

SistemaD Run-Level Low-Down

All'interno del SystemD (aemon), i runlevel sono esposti come "Target". Il concetto è ancora lì, ma il flusso di lavoro per produrre il risultato desiderato per le vostre esigenze è diverso.

L'allegato dovrebbe chiarire questo problema.

Come cambio l'attuale runlevel?

$ systemctl isolate runlevelX.target

Come posso modificare il runlevel predefinito per il prossimo avvio?

# Create a symlink
$ ln -sf /usr/lib/systemd/system/multi-user.target /etc/systemd/system/default.target
  • ln -sf TARGET DESTINATION
  • -s crea un collegamento simbolico
  • -f rimuove il file di destinazione esistente

OPPURE (come suggerito da @centimane) usa semplicemente il systemdcomando "benedetto" :

systemctl set-default [target name].target

Come posso identificare l'attuale runlevel?

$ systemctl list-units --type=target

Posso ancora usare il comando init per passare da un runlevel all'altro?
drpaneas,

2
Se il tuo pacchetto systemd è costruito con il supporto SysV compat, includerà un symlink telinit al binario systemd che, quando chiamato come telinit, mapperà i runlevel 0-6 ai target systemd - controlla telinit (8) per un elenco di quei mapping .
Wieland,

2
Per modificare la destinazione predefinita è necessario utilizzare systemctl set-default [target name].targetanziché creare manualmente il collegamento.
Centimane,

13

No. Come hanno scritto due volte le stesse persone del sistema, una volta nel loro telinitmanuale e una volta nel loro runlevelmanuale, i runlevel sono "obsoleti". Puoi dimenticare i runlevel.

Queste cose in realtà non esistono affatto in systemd, con alcuni spessori di compatibilità.

  • Esistono alcuni collegamenti simbolici per i nomi dei target, ma questi target non vengono mai effettivamente utilizzati da systemd.
    • Piuttosto, il processo bootstrap impiega un default.target(e quindi uno o entrambi di a graphical.targete a multi-user.target), a rescue.targeto a emergency.target. E il processo di spegnimento comporta a shutdown.target, a reboot.target, a halt.targeto a poweroff.target. Nessuna destinazione a livello di runtime non è coinvolta né in bootstrap né in shutdown.
    • Il telinitcomando, che si potrebbe pensare che utilizza i collegamenti simbolici di compatibilità per mappare i suoi argomenti della riga di comando, non lo fa neanche. C'è una tabella cablata nel codice sorgente del telinitprogramma e i numeri 2, 3e 4, 5poiché gli argomenti del comando sono cablati per il mapping a multi-user.targete graphical.target.
    • systemd-update-utmp ha anche una tabella cablata interna.
  • Non esiste una "tabella init" di roba runlevel. systemd è compatibile solo con van Smoorenburg rc, non con van Smoorenburg init.
  • Non esiste un valore di "livello corrente" gestito da systemd stesso. Piuttosto, la quasi interamente non documentato systemd-update-utmpcomando opera internamente in termini di attivazione di stati rescue.target, multi-user.targete graphical.target.
  • systemd-sysv-generator, generatore di unità di servizio di compatibilità con le versioni precedenti di systemd, unisce le /etc/rc[234].ddirectory in un'unica Wanted-Byrelazione con le multi-user.targetunità di servizio generate. Non esiste alcun riferimento effettivo per l'esecuzione dei livelli nelle unità di servizio generate. (Ci sono stati anni fa, ma la gente del sistema ha scoperto che questo è andato storto, perché non venivano citati altrove.)

Se uno è un utente di un sistema che costruisce systemd come Arch Linux per l'interrogatore in " Perché" init 0 "si traduce in" Argomenti in eccesso "su Arch? ", Non si ottengono nemmeno gli shim di compatibilità e comandi come init 0risultato nel comportamento systemd "nativo", che è quello di lamentarsi che il comando è stato invocato in modo errato.

Ulteriori letture


4

Grazie mille. Quindi, se avessi capito correttamente:

Per esempio:

ls -ll /usr/lib/systemd/system/runlevel*.target

Produzione:

/usr/lib/systemd/system/runlevel0.target -> poweroff.target
/usr/lib/systemd/system/runlevel1.target -> rescue.target
/usr/lib/systemd/system/runlevel2.target -> multi-user.target
/usr/lib/systemd/system/runlevel3.target -> multi-user.target
/usr/lib/systemd/system/runlevel4.target -> multi-user.target
/usr/lib/systemd/system/runlevel5.target -> graphical.target
/usr/lib/systemd/system/runlevel6.target -> reboot.target

Come puoi vedere, esiste il concetto di runlevel, ma è piuttosto obsoleto a causa del fatto che i file runlevel.target non sono in realtà file "reali" ma collegamenti soft al nuovo, moderno e meglio definito schema di file che a systemd piace chiamarli "obiettivi".

Quindi, se ti piacerebbe fare qualcosa del genere telinit 5sarebbe così: systemctl isolate runlevel5.target che è identico a: systemctl isolate graphical.target(consigliato a mio parere).

Nel caso in cui sei interessato a conoscere tutti i possibili obiettivi:

ls /usr/lib/systemd/system/*.target

Sì, credo che tu lo stia capendo correttamente. Sarò un tardivo ad adottare SystemD, poiché il sistema procedurale, passo-passo, INIT.D è ciò che ho più familiarità con ... Applaudo che stai esplorando SystemD. La parte migliore di SystemD è il multi-threading parallelo, che consente l'avvio più veloce. L'avvio multi-threading può essere realizzato con INIT.D, ma richiede potenti script BASH.
Tyler Maginnis,

A proposito, ls -llè equivalente a ls -l. Potresti voler prendere l'abitudine di usare ls -ld.
G-Man dice "Reinstate Monica"

telinit 0/ telinit 6ancora funziona. Dal momento che questo aiuta con la migrazione e penso che la maggior parte delle distro non abbia ancora visto un motivo per abbandonare il supporto. isolateaspirava chiaramente a imitare il funzionamento dei livelli di esecuzione, ma ci sono vari casi malvagi. Consiglio vivamente di ignorare tutte le istruzioni isolate runlevel5.targeto addirittura isolate graphical.target. Esempio di caso limite: github.com/systemd/systemd/issues/6505
sourcejedi

0

systemd ha introdotto gli obiettivi come controparte per i runlevel nel sistema init sysV. Gli sviluppatori di sistemi hanno reso quasi compatibile con la maggior parte degli script sysV. Lo stesso succede per telinit <runlevel>. Questo è tradotto in equivalente systemd.

Ad esempio telinit 0, spegne la macchina. systemd ha poweroff.target per fare lo stesso di runlevel 0 . Quindi telinit 0è tradotto da systemd per attivare poweroff.target .

Ma ci sono alcuni problemi di compatibilità con i sistemi init sytemd e sysV-> https://www.freedesktop.org/wiki/Software/systemd/Incompatibilità .

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.