Pianificare comandi e script con crontab


To totally unlock this section you need to Log-in


Login

Nei sistemi operativi Unix e Unix-like, il comando crontab consente la pianificazione di comandi, ovvero consente di registrarli presso il sistema per essere poi mandati in esecuzione periodicamente. Lo stesso nome «crontab» si riferisce anche ai file utilizzati dal comando crontab come «registri» dei comandi pianificati.

Generalmente, crontab usa un demone, chiamato crond, che è costantemente in esecuzione in background e, una volta al minuto, legge i contenuti del registro dei comandi pianificati ed esegue quelli per cui si è esaurito il periodo di attesa. Un comando mandato in esecuzione da crontab viene chiamato cronjob.

Per prima cosa i comandi di base. Se vogliamo editare crontab apriamo il terminale e lanciamo il comando:

$ crontab -e

Di default l’editor di crontab è vi se vogliamo utilizzare un altro editor come nano o emacs lanciamo da terminale il seguente comando:

$ export EDITOR=nano

$ export EDITOR=emacs

Per utilizzare invece mousepad (tipicamente si trova in ambienti XFCE) o gedit:

$ export EDITOR=mousepad

$ export EDITOR=gedit

Mentre se vogliamo vedere la configurazione di crontab lanciamo il comando:

$ crontab -l

Alcuni esempi di schedulazione

Eseguire uno script o un comando il 29 di ogni mese alle 12:20:

20 12 29 * * /home/user/script.sh

20 12 29 * * /usr/bin/squid -k check

Eseguire un comando o uno script ogni 2 minuti:

*/2 * * * * /home/user/script.sh

*/2 * * * * /usr/bin/postqueue -f

Eseguire un comando o uno script solo Lunedì e Venerdì ogni 5 minuti.

*/5 * * * 1-5 /home/user/script.sh

*/5 * * * 1-5 /usr/bin/postqueue -f

Eseguire un comando o uno script solo Martedì e Giovedì alle 10:30.

30 10 * * 2-4 /home/user/script.sh

30 10 * * 2-4 /usr/bin/postqueue -f

Nell’immagine sotto una descrizione del funzionamento di crontab.

Pianificare comandi e script con crontab

Per vedere se il comando o lo script schedulato parta correttamente basta semplicemente visionare il log /var/log/crond.log.

Consiglio ad ogni modifica che viene fatta di riavviare il servizio crond, anche se non sempre necessario.

NOTA: ogni utente ha la possibilità di configurare il proprio crontab, quindi se si volesse configurare come utente root eseguire prima l’accesso con l’utenza (“su -” “sudo su”) oppure sudo crontab -e o su -c crontab -e.