Organizzazione dei servizi
Come abbiamo visto nel paragrafo precedente, all'interno delle varie directory che rappresentano i runlevel troviamo una serie di script che si differenziano nel nome per le iniziali: K o S. Gli script che iniziano per K sono quei processi che verranno eseguiti quando si lascerà/cambierà il runlevel (Kill); gli script che iniziano per S sono quei processi che vengono attivati quando si entra nel runlevel (Start). Dopo queste prime due lettere segue un numero a 2 cifre e poi il nome dello script vero e proprio. Il numero serve a dare un ordine d'avviamento: il più piccolo parte prima e così via. A parità di numero vige l'ordine alfabetico. Inoltre, come abbiamo visto nel capitolo precedente, gli script in /etc/rcS.d saranno i primi ad essere avviati; seguiranno poi i prossimi in funzione del runlevel che verrà avviato.
Per fare un esempio, diamo un'occhiata a qualche script in /etc/rc2.d:
S10rsyslog S20exim4 S20nvidia-glx S30gdm
In questo caso ho ordinato gli script in ordine d'avvio (sono tutti script d'avvio in quanto inizianti con la "S"): dal numero più basso (10) a quelli superiori (30). Lo script exim4 partirà prima di nvidia-glx, semplicemente perchè a parità di numero ha la precedenza nell'ordine alfabetico.
A questo punto i più loquaci si accorgeranno di una cosa; diamo un'occhiata a tutte le informazioni riguardanti questi files con il comando "ls -l":
lrwxrwxrwx 1 root root 17 2009-03-17 15:29 S10rsyslog -> ../init.d/rsyslog lrwxrwxrwx 1 root root 15 2009-09-11 19:45 S20exim4 -> ../init.d/exim4 lrwxrwxrwx 1 root root 20 2009-03-18 02:40 S20nvidia-glx -> ../init.d/nvidia-glx lrwxrwxrwx 1 root root 13 2009-03-17 16:00 S30gdm -> ../init.d/gdm
Ebbene sì! Fino ad ora abbiamo parlato degli script in /etc/rcX.d, ma come possiamo notare non si tratta che di alias (links) i quali puntano agli script effettivi in /etc/init.d. Abbiamo così capito che tutti gli script relativi ai servizi e ai demoni da lanciare al boot risiedono in quest'ultima directory; quali servizi attivare, quando e dove (in che runlevel) è però definito con gli alias in /etc/rcX.d come abbiamo visto sopra.
Se avete capito come funzionano i runlevel, non rimarrete meravigliati nel constatare che nel runlevel 1 troviamo quasi solo degli script d'"arresto" (K) (le eccezioni sono dovute a quei pochi script che preparano l'avvio in single-user mode dopo aver terminato tutti i processi del multi-user mode), mentre nel runlevel S troviamo unicamente degli script d'avvio (S) (in quanto si arriva dal runlevel N, in poche parole dalla fine del boot del kernel, dove nessun processo è ancora stato attivato [vi ricordate il "famoso" pid 1 ?]).