Approfondimento : I Livelli di esecuzione ( Run Level )

()

I Livelli di esecuzione

Durante il processo di avvio per i sistemi Linux-Unix, il comando init apre il file / etc / inittab per decidere a quale “runlevel” il sistema deve essere avviato. Il file / etc / inittab è un file di testo semplice che può essere aperto con il tuo editor di testo preferito.

Un runlevel, e’ l’espressione che potrebbe essere traducibile in italiano con “modalità di esecuzione”, nella famiglia dei sistemi di tipo UNIX, indica  le varie modalità di avvio ed esecuzione del sistema operativo.

Nel mondo Unix ci sono due principali approcci al processo di avvio del sistema: quello usato da System V e quello, meno complesso ma meno flessibile, usato dai sistemi della famiglia BSD. Linux utilizza il metodo derivato da System V, che si basa su differenti runlevels, astrazioni a livello software per indicare diversi stati della macchina in cui possono (e devono) girare diversi programmi.

La sezione rilevante di un file di esempio / etc / inittab è la seguente:

# Runlevel predefinito. I runlevel utilizzati da RHS sono:

# 0 – halt (NON impostare initdefault su questo)
# 1 – Modalità utente singolo
# 2 – Multiutente, senza NFS (uguale a 3, se non si dispone di rete)
# 3 – Modalità multiutente completa
# 4 – inutilizzato
# 5 – X11
# 6 – riavvio (NON impostare initdefault su questo)

# id: 3: initdefault:

La linea chiave nell’esempio sopra è:

id: 3: initdefault:

Questo dice al processo init che il livello di esecuzione predefinito per il sistema è di livello 3.
Per passare a un livello di esecuzione diverso, basta cambiare il numero e salvare il file / etc / inittab.
Prima di farlo, tuttavia, assicurati di conoscere il livello di corsa desiderato.
La selezione del runlevel errato può avere gravi conseguenze.
A tale scopo, nella tabella seguente è descritta una descrizione dettagliata dei singoli livelli di esecuzione:

Runlevel                   Descrizione del runlevel

Runlevel 0              Arresta il runlevel: questo è il runlevel a cui il sistema si spegne. Per ovvie ragioni è                                            improbabile che tu voglia questo come runlevel predefinito.
Runlevel 1              Runlevel singolo. Ciò provoca l’avvio del sistema in una modalità a singolo utente in                                       cui solo l’utente root può accedere. In questa modalità il sistema non avvia alcuna                                           rete o X windowing, X o servizi multiutente. Questo livello di esecuzione è ideale per                                        gli amministratori di sistema per eseguire attività di manutenzione o riparazione del                                        sistema.
Runlevel 2               Avvia il sistema in modalità multiutente con funzionalità di accesso alla console                                                basata su testo. Questo runlevel non avvia tuttavia la rete.
Runlevel 3              Simile al runlevel 2 tranne per l’avvio dei servizi di rete. Questo è il runlevel più                                                   comune per i sistemi basati su server che non richiedono alcun tipo di ambiente                                                desktop grafico.
Runlevel 4               Runlevel indefinito. Questo runlevel può essere configurato per fornire uno stato di                                          avvio personalizzato.
Runlevel 5              Avvia il sistema in uno stato multiutente in rete con funzionalità X Window System.                                           Per impostazione predefinita, l’ambiente desktop grafico inizierà alla fine del                                                     processo di avvio. Questo è il livello di esecuzione più comune per l’utilizzo su                                                    desktop o workstation.
Runlevel 6            Riavvia il sistema. Un altro runlevel che difficilmente vorrai come predefinito.

Dopo molti anni di piccoli cambiamenti in Linux, come amministratori, ora abbiamo alcune modifiche che si fanno strada nelle distribuzioni Enterprise Linux. Upstart è una gradita modifica agli script sysinit a cui siamo stati abituati negli ultimi 20 anni. Tuttavia, come per tutte le modifiche, c’è un piccolo aggiustamento e non abbiamo più il file / etc / inittab in Ubuntu Server 12.04. Se dobbiamo impostare il livello di esecuzione predefinito, ora modifichiamo /etc/init/rc-sysinit.conf dove possiamo vedere la linea:

env DEFAULT_RUNLEVEL = 2

Sui sistemi Red Hat 6 e CentOS 6 e versioni successive il file / etc / inittab viene utilizzato solo per la configurazione del livello di esecuzione predefinito

Directory di esecuzione tradizionale di System V

Sui sistemi Linux tradizionali in cui sono ancora in uso gli script di init System V standard e questo include tutte le distribuzioni moderne, ogni livello di esecuzione è rappresentato da una directory contenente collegamenti simbolici agli script effettivi che si avviano all’arresto dei servizi. Su Red Hat e CentOS queste directory sono in /etc/rc.d: Questo è simile su SUSE 11 e precedenti, ad eccezione delle directory a livello di esecuzione che si trovano nella directory /etc/init.d. Questo dimostra che le distribuzioni Linux sono molto simili, l’arte è solo essere in grado di scoprire le esigenze di un particolare sistema.

Laddove vengono utilizzate queste directory di livello di esecuzione, sia su SUSE che su Red Hat Enterprise Linux, conterrà collegamenti simbolici agli script di servizio in /etc/init.d. I collegamenti simbolici inizieranno con una K o una S. I collegamenti simbolici che iniziano con una S vengono collegati quando si accede al livello di esecuzione e utilizzano il servizio di avvio, quando si lascia il livello di esecuzione vengono richiamati i collegamenti simbolici K per arrestare i servizi.

Arresto

A volte è più desiderabile dare agli utenti un avviso di un arresto o riavvio imminente, i root o gli utenti che sono stati designati permessi all’interno dei file / etc / sudoers possono usare il comando shutdown e programmare l’arresto o il riavvio in un momento futuro o così via molti minuti I messaggi verranno visualizzati agli utenti prima dell’evento.

shutdown -r +5: riavvio in 5 minuti
chiusura -h 14:30: arresto alle 2.30 del pomeriggio

Possiamo anche usare shutdown -r now per riavviare immediatamente o shutdown -h now per arrestare immediatamente.

Avvio – UpStart

Dal 2009 Ubuntu ha convertito i propri servizi per utilizzare Upstart. Questa è stata una caratteristica di Ubuntu 6.10 e Fedora 9 e successive. Con questo processo i file di configurazione vengono creati nella directory / etc / init e questi file mantengono, se preferisci, la configurazione dell’avvio del servizio attraverso le stanze “start on” e “stop on”. Non abbiamo più bisogno dei link simbolici nelle directory rc per controllare l’avvio automatico di un servizio. Possiamo anche lasciare chkconfig, insserv e servizio alle spalle e in questo video ti mostreremo come si fondono tutti.

Per l’amministratore / sbin / initctl può sostituire chkconfig e il servizio nei sistemi Sys V originali a cui siamo stati abituati:

Systemd

Nella maggior parte delle attuali distribuzioni Linux, systemd è il sistema predefinito e il gestore di avvio. I servizi possono essere gestiti e abilitati utilizzando lo strumento systemctl. Se stai usando le versioni attuali di Fedora, Red Hat, openSUSE, CentOS, Debian o Ubuntu, avrai un dispositivo basato su systemd.

Ad ogni runlevel corrisponde un apposito script di avvio situato nelle directory /etc/rc.d/

Il percorso completo per ognuno dei suddetti file è:

/etc/rc.d/rc0.d

/etc/rc.d/rc1.d

/etc/rc.d/rc2.d

/etc/rc.d/rc3.d

/etc/rc.d/rc4.d

/etc/rc.d/rc5.d

/etc/rc.d/rc6.d

Al nome di ogni script contenente un determinato numero corrisponde il relativo runlevel. Il comportamento dei suddetti e regolato nel file /etc/inittab che definisce appunto cosa faccia ciascuno dei runlevels. Appena dopo il suo avvio il kernel lancia il processo init che a sua volta andrà a leggere il contenuto del file inittab per analizzare il comportamento di ciascun runlevel.

Lo script /etc/rc.d/rc gestisce quali processi far partire a seconda del runlevel. Analizzando le singole directory /etc/rc.d/rc#.d (ove # sta per il numero associato ad un particolare runlevel).

In queste directory esistono una serie di collegamenti simbolici con nomi del tipo S12syslog o K65identd che puntano a degli script con nomi tipo:

/etc/rc.d/init.d/syslog

/etc/rc.d/init.d/identd

/etc/rc.d/rc

a seconda della directory corrispondente al runlevel da caricare, che fan partire tutti gli script che iniziano con S (S per start) e fa chiudere tutti quelli che iniziano con K (K per kill), eseguendoli nell’ordine indicato dal numero presente nei nomi dei suddetti collegamenti.

Gli script che di fatto permettono di gestire l’avvio o lo stop di un servizio sono quindi nella directory /etc/rc.d/init.d/ e possono essere utilizzati direttamente dall’utente per gestire i singoli processi.

Per esempio: /etc/rc.d/init.d/httpd start potrebbe avviare un server web e /etc/rc.d/init.d/stop arrestarlo.

Se abbiamo il file (un collegamento a ../init/httpd/etc/rc.d/rc3.d/S85httpd, ad esempio, avremo un server web avviato quando la macchina è al runlevel 3 (spesso di default utilizzato per un server, che non ha necessità di un X windows system).

Se vogliamo evitare che venga avviato un server web, basterà rinominare il file, sostituendo la K alla S:

mv /etc/rc.d/rc3.d/S85httpd /etc/rc.d/rc3.d/K85httpd

Nel fare queste operazioni va sempre considerato il numero dopo la prima lettera, che determina l’ordine di esecuzione degli script. Questa è una logica comune a tutti gli Unix derivati da System V; possono cambiare i nomi dei runlevels, e in certi casi la funzione, ma non la logica di tale struttura d’avvio di un PC.

/ 5
Grazie per aver votato!

How useful was this post?

Click on a star to rate it!

Average rating / 5. Vote count:

No votes so far! Be the first to rate this post.

As you found this post useful...

Follow us on social media!

We are sorry that this post was not useful for you!

Let us improve this post!

Tell us how we can improve this post?