prof. Nunzio Brugaletta |
atapSO |
EnneBi –
Computer Science
Avanti – Indietro – Inizio
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.
http://ennebi.solira.org |
ennebi@solira.org |