Appunti su Gentoo Linux.
Lo schedulatore di comandi: fcron

Uno dei demoni fondamentali che dovrebbero essere installati su ogni sistema GNU/Linux è il demone cron o uno dei suoi derivati. Cron (dal greco "tempo") è il demone che si occupa di eseguire, a intervalli di tempo o in momenti specifici, dei comandi generici specificati dall'utente. Una delle implementazioni che più mi piacciono è fcron. Le istruzioni seguenti si riferiscono a fcron ma attualmente uso dcron, più piccolo semplice e più o meno con le stesse funzionalità di fcron.

Installazione e permessi

# emerge fcron
# /etc/init.d/fcron start
# rc-update add fcron default

Gli utenti che possono usare fcron sono l'utente root, gli utenti appartenenti al gruppo cron ed infine un utente speciale chiamato systab.

fcron ha due file /etc/fcron/fcron.deny e /etc/fcron/fcron.allow che servono per abilitare o disabilitare gli utenti all'uso di fcron. Di default fcron viene fornito con il file fcron.allow che permette a tutti gli utenti di usare fcron (purché siano appartenenti al gruppo cron). (Se questi due file non esistono l'accesso di tutti gli utenti è garantito). Il modo più sicuro di gestire fcron è quello di proibire a tutti l'accesso mettendo "all" in /etc/fcron/fcron.deny e poi abilitare esplicitamente solo alcuni utenti in /etc/fcron/fcron.allow. Ricordatevi che gli utenti per usare fcron devono anche far parte del gruppo cron. Come soluzione però mi pare esagerata. Nel mio caso semplicemente lascio i file fcron.deny e fcron.allow così come sono e uso solo l'appartanenza o meno al gruppo cron per permettere o proibire l'accesso degli utenti a fcron. Ricordo inoltre che l'utente root può invece sempre usare il demone cron, indipendentemente se fa parte o meno del gruppo cron o se si trova nei file fcron.deny o fcron.allow.

Uso

Usando il comando fcrontab -e viene lanciato l'editor predefinito con il file relativo ai propri comandi schedulati, chiamato file fcrontab (inizialmente il file è vuoto). Questi file si trovano in /var/spool/fcron .
Se si hanno i diritti (ad esempio siete l'utente root) potete anche modificare i file fcrontab degli altri utenti. Per fare questo usare il comando fcrontab -e utente.
Per vedere la lista dei comandi schedulati usare fcrontab -l utente, se si omette l'utente ci si riferisce tacitamente all'utente che ha lanciato il comando.

La sintassi per schedulare i comandi (dopo aver lanciato lanciando fcrontab -e) è ben spiegata qui: fcrontab(5).

Spesso i comandi che si vogliono schedulare sono comandi di amministrazione, cioè possono essere lanciati solo dall'utente root. Questi comandi possono essere schedulati anche da un utente fittizio chiamato systab, creato appositamente per il lancio dei comandi di sistema (fcrontab -e systab). Io consiglio vivamente di usare sempre l'utente root, ignorando systab (verificare che l'utente systab non abbia alcun comando schedulato).

L'utente systab diventa utile solo quando volete rendere operative le directory cron.hourly, cron.daily, cron.weekly e cron.monthly. Queste directory si trovano in /etc/ e vi si possono mettere degli script (o link a script) che verranno eseguiti con un periodo dettato dal nome della directory.
Molti programmi durante la loro installazione copiano degli script in queste directory. Io preferisco sempre specificare a mano (con l'utente root) ciò che deve essere schedulato. In ogni caso, se volete che fcron esegua anche tutto quello contenuto nelle cron.*, basta lanciare fcrontab -u systab /etc/crontab.
Da notare che /etc/crontab è il file dei comandi schedulati di sistema nelle altre implementazioni di cron. È in questo file che formalmente bisognerebbe inserire altri comandi di amministrazione; ricordarsi però di ricaricare il file con fcrontab -u systab /etc/crontab ogni volta che lo si modifica. Questo modo di fare però non è nello stile di fcron, che come sappiamo permentte di modificare un fcrontab lanciando fcrontab -e.

Esempi

Qui di seguito riporto il contenuto del file fcrontab dell'utente root del mio sistema.

# fcrontab by Francesco Biccari
#
!mailto(root),erroronlymail(true)

# regolazione dell'orologio ogni notte alle 4
&bootrun 0 4 * * * "date --rfc-3339='seconds' && ntpd -q"
# sync di portage ogni notte alle 4:20
&bootrun 20 4 * * * "date --rfc-3339='seconds' && emerge --sync"

# aggiornamento del database di mlocate una volta a settimana, alle 5 di lunedì
&bootrun 0 5 * * 1 "date --rfc-3339='seconds' && updatedb && echo 'updatedb completato'"
# backup del sito web una volta a settimana, alle 6 di mercoledì
&bootrun 0 6 * * 3 "date --rfc-3339='seconds' && /root/bin/bin/website_backup && echo 'backup sito web completato'"