Nel 2002 FreeBSD ha integrato il sistema di inizializzazione rc.d di NetBSD. Gli utenti dovrebbero aver notato i file elencati
nella cartella /etc/rc.d. Molti di questi file sono servizi di
base che possono essere controllati con opzioni start
, stop
, e restart
. Ad esempio, sshd(8) può
essere riavviato con il comando seguente:
# /etc/rc.d/sshd restart
Questa procedura è simile a quella per altri servizi. Naturalmente, i servizi in genere vengono avviati automaticamente in fase di avvio secondo quanto specificato in rc.conf(5). Ad esempio, per abilitare il demone per il NAT (Network Address Translation) all'avvio basta aggiungere la linea seguente a /etc/rc.conf:
natd_enable="YES"
Se esiste già una linea natd_enable="NO"
, allora
basta cambiare il valore da NO
a YES
. Gli script rc caricheranno automaticamente ogni altro servizio
durante il riavvio seguente, come descritto più avanti.
Poichè il sistema di rc.d è inteso
prevalentemente per avviare/bloccare i servizi al momento dell'accensione/spegnimento, le
opzioni standard start
, stop
e
restart
avranno il comportamento appropriato solo seè
stata impostata la variabile appropriata in /etc/rc.conf. Ad
esempio il comando precedente sshd restart funzionerà
solo se in /etc/rc.conf è stata impostata l'opzione
sshd_enable
a YES
. Per avviare
(start
), fermare (stop
) o
riavviare (restart
) un servizio, ignorandole impostazioni in
/etc/rc.conf, i comandi devono avere il prefisso
“one”. Ad esempio per riavviare sshd trascurando le
impostazioni esistenti in /etc/rc.conf, impartite il comando
seguente:
# /etc/rc.d/sshd onerestart
È semplice controllare se un servizio è stato abilitato in /etc/rc.conf eseguendo lo script appropriato in rc.d con l'opzione rcvar
. Dunque, un
amministratore può controllare che sshd sia
effettivamente abilitato in /etc/rc.conf eseguendo:
# /etc/rc.d/sshd rcvar # sshd $sshd_enable=YES
Nota: La seconda linea (# sshd) è l'output del comando sshd; non una console di root.
Per determinare se un servizio è attivo, è disponibile l'opzione status
. Ad esempio per verificare che sshd
sia effettivamente avviato:
# /etc/rc.d/sshd status sshd is running as pid 433.
In alcuni case è anche possibile effettuare il reload
di un servizio. Questo tenterà di inviare un segnale
al servizio, per fargli ricaricare il suo file di configurazione. Nella maggior parte dei
casi si tratterà del segnale SIGHUP. Il supporto per
questa caratteristica non è garantito per tutti i servizi.
La struttura di rc.d non viene usata solo per i servizi di rete, ma contribuisce anche per buona parte all'inizializzazione del sistema. Ad esempio, considerate il file bgfsck. Quando lo script viene eseguito, esso stamperà il seguente messaggio:
Starting background file system checks in 60 seconds.
Dunque questo file viene usato per il controllo del file system in background, che avviene solo durante l'inizializzazione del sistema.
Molti servizi di sistema dipendono da altri servizi per poter funzionare in maniera appropriata. Ad esempio, il NIS ed altri servizi basati sulle RPC potrebbero non funzionare in assenza di rpcbind (portmapper). Per risolvere il problema, nei commenti all'inizio di ogni script di avvio ci sono informazioni sulle dipendenze ed altri metadati. Il programma rcorder(8) viene poi utilizzato per effettuare il parsing di questi commenti durante l'inizializzazione di sistema e per determinare l'ordine con il quale questi servizi devono essere avviati per avere le proprie dipendenze soddisfatte. In cima ad ogni file di avvio possono essere incluse le seguenti parole:
PROVIDE: Specifica i servizi forniti dal file.
REQUIRE: Elenca i servizi richiesti per far funzionare correttamente questo servizio. Questo file verrà eseguito dopo i tali servizi.
BEFORE: Elenca i servizi che dipendono da questo. Questo file verrà lanciato prima dei servizi specificati.
Usando questo metodo, un amministratore può controllare facilmente i servizi di sistema senza il fastidio dei “runlevel” come alcuni altri sistemi operativi UNIX®.
Informazioni addizionali sul sistema rc.d possono essere trovate nelle pagine man di rc(8) e rc.subr(8). Se sei interessato a scrivere un tuo script rc.d o a migliorarne uno esisente, ti può essere utile questo articolo.
Questo, ed altri documenti, possono essere scaricati da ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.
Per domande su FreeBSD, leggi la documentazione prima di contattare <questions@FreeBSD.org>.
Per domande su questa documentazione, invia una e-mail a <doc@FreeBSD.org>.