Pillole di Unix/Linux: i servizi, i runlevel e gli script rc.d

Spread the love

Un servizio è un programma, o un insieme di programmi, che gira in background e di cui non ci preoccupiamo fino al momento in cui ne abbiamo bisogno. Esempi di servizi sono Apache, MySQL e CUPS (il server per la gestione delle stampanti). Un servizio è detto a volte service e a volte server.

Un runlevel è una fase di funzionamento del sistema operativo inteso come insieme di servizi che vengono accesi quando si entra in una determinata fase dall’avvio.

Il sistema operativo parte sempre dal runlevel 1 (livello in cui è consentito un accesso ad un singolo utente), progressivamente attraverso i livelli 2, 3, 4 e 5, livello al quale possiamo cominciare a lavorare con tutti i servizi funzionanti, compresa la GUI (Graphics User Interface) cioè l’interfaccia grafica a cui siamo abituati da molto tempo. Il tutto si esaurisce nel tempo che intercorre tra l’accensione del computer e la comparsa della maschera di login, quindi generalmente – se la macchina ha subito una corretta manutenzione – alcuni secondi.

Esistono due ulteriori livelli:

  • il livello 0 nel quale il sistema operativo entra per eseguire un arresto (HALT)
  • il livello 6 nel quale il sistema operativo entra per eseguire un riavvio (REBOOT)

Varie versioni di Unix hanno storicamente sviluppato diverse versioni dei runlevels:

  • BSD (Berkeley Software Distribution) per esempio i runlevel non ha li ha proprio 🙂
  • System V (AT & T) ha i runlevel seguenti, ognuno dei quali prevede avvio di specifici servizi: ad esempio il 2 è un funzionamento multi utente senza la rete, il 3 è un funzionamento multiutente con la rete ma solo in modalità testo, …, il 5 funzionamento multi utente con rete e interfaccia grafica).
  • Debian (da cui deriva Ubuntu) hai il runlevel 1 single user text mode, e 3, 4 e 5 multi user completo.

L’ordine di avvio dei runlevel viene impartito al sistema operativo dal file /etc/inittab.

Per le versioni derivate da Debian (come Ubuntu) invece il file /etc/inittab non esiste e l’ordine viene invece scritto dentro ai file contenuti nelle directory rcX.d, dove X = 0, …, 6

Ci si può spostare di runlevel all’occorrenza, ad esempio se si verificano errori strani o ci sono servizi che non partono. Basta scrivere da terminale (occorrono i privilegi di root)

# init [runlevel]

Se runlevel è eguale a 0 o 6, rispettivamente arrestiamo o riavviamo  la macchina.

Scrivendo il comando init 4, ad esempio, il sistema carica ed esegue gli script contenuti nella directory /etc/rc4.d/

Attenzione: ci sono situazioni nelle quali non è possibile aprire una shell e digitare il comando init . Questo accade ad esempio se proprio X (il server grafico) si è inchiodato (non risponde il mouse, non rispondono le finestre). Niente paura, questo non è Windows: possiamo entrare in una shell a runlevel 4 (solo testo) con la combinazione di tasti Ctrl+Alt+F6 o F7… ognuna delle quali combinazioni aprirà una shell di testo a schermo intero (in runlevel 4, il sistema è in modalità multi utente) dal quale si potrà agire sul servizio che non risponde (in questo caso ad esempio si può operare un riavvio di X). Ad esempio potremmo identificare l’id del processo X e killarlo. A quel punto X ripartirà automaticamente.

init è il padre di tutti i processi, il programma che lancia il sistema operativo. È senza dubbio il programma più importante del sistema operativo. Possiamo vedere ciò in quanto il suo PID (Process ID) è sempre il numero 1:

$ ps aux 
USER PID %CPU %MEM    VSZ  RSS TTY STAT  START TIME COMMAND
root 1    0.0  0.0 185152 5816   ?   Ss  11:29 0:01 /sbin/init splash
root 2    0.0  0.0      0    0   ?    S  11:29 0:00 [kthreadd]
root 3    0.0  0.0      0    0   ?    S  11:29 0:00 [ksoftirqd/0]
root 5    0.0  0.0      0    0   ?    S< 11:29 0:00 [kworker/0:0H]
root 7    0.1  0.0      0    0   ?    S  11:29 0:13 [rcu_sched]
root 8    0.0  0.0      0    0   ?    S  11:29 0:00 [rcu_bh]
...

 

Bibliografia

[1] http://www.linux.com

[2] Stephen Coffin, UNIX System V Release 4, 1990 McGraw-Hill

Lascia un commento

Your email address will not be published.