prof. Nunzio Brugaletta

atapSO

EnneBi – Computer Science
AvantiIndietroInizio




Avvio e fermo dei servizi

Nel sistema possono essere installati diversi servizi come per esempio il web server Apache, il DB server MySQL o il server di stampa. Si tratta di programmi che funzionano in background in attesa, se avviati, di richieste da parte di un programma client. In Linux sono spesso chiamati daemon. I daemon sono gestiti da script di shell conservati in /etc/init.d:

$ ls -l /etc/init.d
...
-rwxr-xr-x 1 root root 6157 2010-11-18 22:16 apache2
-rwxr-xr-x 1 root root 3095 2011-09-12 16:38 cups
-rwxr-xr-x 1 root root 1329 2009-09-07 20:58 halt
lrwxrwxrwx 1 root root   21 2011-05-01 16:41 mysql -> /lib/init/upstart-job
lrwxrwxrwx 1 root root   21 2011-05-01 16:30 network-interface -> /lib/init/upstart-job
...

Nell'esempio sono evidenziati alcuni script per la gestione dei server Apache, MySQL e del sistema di stampa CUPS, dei servizi di rete e di servizi utili per la chiusura del sistema (halt).

Ad ogni run-level corrisponde una directory del tipo /etc/rc?.d. Per esempio per il run level 2 la directory corrispondente è /etc/rc2.d. In ogni directory sono conservati tutta una serie di link simbolici ai servizi installati e che si vogliono gestire in quel run level. I collegamenti hanno nomi che cominciano con K (kill) o S (start), seguiti da un numero e dal nome del servizio. Il numero indica l'ordine con cui i vari servizi devono essere fermati o lanciati. Lo script di inizializzazione prima stoppa tutti i servizi il cui nome comincia con la K, nell'ordine dettato dal numero seguente, poi avvia tutti i servizi collegati ai nomi che cominciano per S, anche questi nell'ordine specificato dal numero seguente. Gli script conservati nella directory relativa ad un runlevel sono avviati dopo quelli residenti in /etc/rcS.d che sono comuni ad ogni runlevel.

Per esempio nel caso di stop del sistema (runlevel 0):

$ ls -l /etc/rc0.d/
totale 0
lrwxrwxrwx 1 root root  17 2008-09-29 21:17 K09apache2 -> ../init.d/apache2 
lrwxrwxrwx 1 root root  16 2008-09-24 11:31 K16dhcdbd -> ../init.d/dhcdbd 
lrwxrwxrwx 1 root root  19 2008-09-29 21:43 K22mysql-ndb -> ../init.d/mysql-ndb 
lrwxrwxrwx 1 root root  23 2008-09-29 21:43 K23mysql-ndb-mgm -> ../init.d/mysql-ndb-mgm
...
lrwxrwxrwx 1 root root  18 2011-05-01 16:55 S20sendsigs -> ../init.d/sendsigs 
lrwxrwxrwx 1 root root  22 2008-09-24 11:31 S31umountnfs.sh -> ../init.d/umountnfs.sh 
lrwxrwxrwx 1 root root  20 2011-05-01 16:30 S35networking -> ../init.d/networking 
lrwxrwxrwx 1 root root  18 2008-09-24 11:31 S40umountfs -> ../init.d/umountfs 
lrwxrwxrwx 1 root root  20 2008-09-24 11:31 S60umountroot -> ../init.d/umountroot 
lrwxrwxrwx 1 root root  16 2009-06-14 09:39 S89casper -> ../init.d/casper 
lrwxrwxrwx 1 root root  14 2008-09-24 11:31 S90halt -> ../init.d/halt

vengono fermati tutti i servizi avviati, dopodiché, nell'ordine, viene mandato il segnale di terminazione a eventuali programmi ancora in esecuzione, si smonta il file system e, in ultimo (S90...), si arresta il sistema.

Per poter rendere disponibile, in un determinato runlevel, un servizio all'avvio del sistema basta creare, nella directory relativa, un link simbolico al servizio contenuto in /etc/init.d, assegnando un nome composto da S seguito dal numero d'ordine e dal nome del servizio.

In generale, per motivi di sicurezza, è preferibile rendere disponibili sempre solo i servizi strettamente indispensabili, avviare quelli che si usano saltuariamente soltanto qualora servano e fermarli quando non servono. Gli script di gestione dei servizi prevedono, per mezzo di un parametro specificato nel lancio dello script, la possibilità di avvio e fermo. Per esempio:

$ sudo service apache2 start
 * Starting web server apache2 
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName httpd (pid 5333) already running [ OK ]

avvia il web server. Altri parametri applicabili, oltre a start che avvia il servizio, sono, tipicamente: stop per fermare il servizio, restart per riavviarlo, per esempio, quando si è modificato il file di configurazione e si vuole che il server rilegga la nuova configurazione. In generale, infatti, il file di configurazione viene letto all'avvio.

$ ps -A | grep apache 
 5333 ?        00:00:00 apache2 
 5336 ?        00:00:00 apache2 
 5337 ?        00:00:00 apache2 
 5338 ?        00:00:00 apache2 
 5339 ?        00:00:00 apache2 
 5340 ?        00:00:00 apache2

il comando ps seguito dal parametro -A premette di avere un elenco di tutti i processi attivi. Se l'output che normalmente viene inviato al monitor, viene filtrato da grep per la ricerca della stringa apache all'interno dell'elenco, il comando restituisce informazioni sull'attività del server. Si ricorda il significato delle colonne presenti nell'output del comando: il PID del processo, il terminale associato al processo (in questo caso non c'è un terminale), il tempo CPU utilizzato, la linea di comando che ha avviato il processo.




AvantiIndietro - Inizio

http://ennebi.solira.org

ennebi@solira.org