Nel precedente capitolo abbiamo visto l'avvio dei programmi "automatizzato" da init, esaminando il contenuto della varie directory /etc/rcX.d (che, non abbiamo in precedenza detto, possono variare a seconda della distribuzione). Ci siamo però fermati al fatto che un servizio viene avviato richiamato dal programma rc. Questa cosa è comunque ricollegabile a qualcosa di cui ci siamo già occupati: i messaggi del boot; richiamiamo quindi qualcosa di già visto:
Starting system log daemon: syslogd klogd.
Starting anac(h)ronistic cron: anacron.
Starting advanced power management daemon: apmd.
Starting mouse interface server: gpm.
Starting internet superserver: inetd.
Starting PostgreSQL postmaster
Starting X font server: xfs.
Starting professional ftp daemon: proftpd.
Starting periodic command scheduler: cron.
Starting web server: apache.
Questo sono gli ultimi messaggi che si vedranno al boot prima che ci si presenti la richiesta di login. E, se riprendete quanto già scritto nel capitolo precedente, noterete certamente che tutti questi programmi vengono eseguiti nello stesso ordine che ci si aspetta leggendo il numero che, in /etc/rc2.d, precede il nome del programma da avviare.
Tutti questi programmi avviati automaticamente all'avvio del sistema, sono detti demoni o servizi: la loro caratteristica fondamentale, a differenza dei normali programmi, è che i demoni sono normalmente in esecuzione per tutta una sessione di lavoro (che, per un server, potrebbe essere anche di qualche mese!), dall'avvio allo shutdown. Il motivo è semplice: questi programmi, infatti, devono sempre essere in ascolto per soddisfare eventuali richieste provenienti dall'utente o dall'esterno, nel caso la macchina sia in rete. Prendiamo ad esempio il server FTP, proftpd, suppondendo che la macchina sia collegata in rete: se esso non fosse in esecuzione, ogni connessione alla nostra macchina sarebbe categoricamente rifiutata, e l'amministratore dovrebbe agire manualmente per avviarlo; ma se installiamo un servizio, probabilmente lo facciamo perchè intendiamo utilizzarlo, quindi perchè lasciarlo inattivo?
La questione dei "servizi sempre attivi" su una macchina spesso porta a qualche perplessità: molti, infatti, si chiedono perchè avere dei programmi sempre attivi anche se non vengono utilizzati. Se da un lato questa perplessità sia più che giustificata, dall'altra dobbiamo andare a vedere come funziona tecnicamente un demone, facendoci ancora una volta aiutare dal programma "ps", che ci fornirà altre importanti informazioni.
Un demone, normalmente, è un programma che resta in attesa su una porta del sistema in attesa che qualcuno o qualcosa richieda una connessione. Lo stato in cui normalmente questo programma si trova è detto "sleep", come se il programma fosse "in letargo": le risorse occupate dal demone, quindi, risultano minime, poichè di fatto il programma sta solamente "sopravvivendo"!
Vediamo ora la cosa con qualche dato in più alla mano: tramite il programma "ps" vediamo di ricavare qualche utile informazione: monotoriamo il demone Apache (legato al protocollo HTTP) in sleep ed in attività:
USER PID %CPU %MEM [...] TTY STAT START TIME COMMAND
root 179 0.0 6.7 [...] ? S 22:50 0:01 /usr/sbin/apache
In questo primo caso, Apache è in Sleep (dimostrato dalla "S" nella colonna "STAT"), non occupa per nulla la CPU (visto che nella colonna CPU c'è un chiaro 0.0%) ed utilizza una piccola parte di memoria, che probabilmente avrà utilizzato per l'avvio e per restare in vita. Come vedete, quindi, un programma in sleep occupa solamente una parte della memoria (che comunque occuperebbe anche se fosse avviato su richiesta) e nessun'altra risorsa di sistema! E, soprattutto, non ci forza ad avviare un servizio quando ce ne sia il reale bisogno, visto che questo saprà rispondere automaticamente una volta interrogato.
Il fatto di avere molti servizi attivi nella macchina, comunque, potrebbe comportare seri problemi di sicurezza, di cui ci oppuperemo in seguito.
Vediamo ora come i singoli servizi possano essere gestiti manualmente. Già abbiamo detto che nelle installazioni standard i servizi vengono attivati automaticamente al boot, e che vengono interrotti al momento dello shutdown. Esiste però la possibilità di gestire manualmente i servizi in una macchina, ed il caso più probabile è quello di una modifica della configurazione stessa.
Torniamo ad Apache per gli esempi. Di default, esso è in ascolto sulla porta 80 ma, per qualche motivo, si potrebbe decidere di modificare questa impostazione, mettendolo in ascolto, ad esempio, sulla porta 8080. Dopo aver modificato il file di configurazione, se Apache non viene riavviato esso sarà sempre in ascolto sulla porta 80, fino al successivo reboot quando il file di configurazione verrà riletto. Ma, soprattutto per un server di rete, i periodi di uptime (ossia il periodo di attività senza interruzioni di una macchina) sono assai lunghi, e non sarebbe pensabile di, come si dice in gergo, "buttare giù" il server.
Per questo motivo, è prevista la possibilità di riavviare un solo servizio senza che nessun'altra applicazione ne risenta.
Di base, il comando è:
/etc/init.d/apache stop (o /etc/rc.d/init.d/apache stop per RedHat e derivate).
per interromperlo e:
/etc/init.d/apache start per avviarlo. In alternativa, un metodo più rapido è:
/etc/init.d/apache restart tramite il quale le azioni stop e start vengono chiamate in successione. Di norma, tutti i servizi prevevedono almeno le opzioni stop, start e restart con la sintassi:
/etc/init.d/NOME_SERVIZIO start|stop|restart. Inoltre, alcuni servizi prevedono anche altre azioni che comunque, rispetto alle precedenti, vengono usate molto più di rado.