In tutti i sistemi Debian-based, quindi Ubuntu ma anche il Raspbian che gira sul Raspberry Pi son dotati di un sistema particolare per automatizzare alcuni processi a intervalli giornalieri, mensili, annuali e tanto altro. Cron è un demone del sistema che si occupa di eseguire questi task (in background) in un certo tempo.
Il CronTab invece è un file testuale che contiene proprio la lista di comandi che verranno eseguiti da Cron.

Ogni utente sul sistema ha un file crontab. Esiste persino una root crontab per i task che richiedono privilegi amministrativi.

Usare Cron

Per usare Cron, basta aprire il terminale e dare il comando:

crontab -e

si accederà al file che appartiene all’utente che ha dato il comando sul terminale.

Se vogliamo impostare dei task con privilegi amministrativi dovremmo accedere al crontab come utenti root:

sudo crontab -e

Aggiunto un task possiamo salvare il file. Le sezioni che compongono una entry nel crontab sono spiegate di seguito:

Sezioni Crontab

Ognuna di queste “sezioni” è separata da uno spazio, con la sezione finale con uno o più spazi all’interno. Nessuno spazio è permesso all’interno della Sezione 1-5, solo fra di essi. Le sezioni 1-5 vengono usate per indicare quando e quanto spesso si vuole che venga eseguito il comando. Questo è un esempio di cron job:

01 06 1 1 1 /usr/bin/cartella/comando

Con le sezioni rispettivamente a indicare:
minuti (0-59), ore (0-23, 0 = mezzanotte), giorno (1-31), mese (1-12), giorno della settimana (0-6, 0 = domenica), Comando.

L’esempio mostrato sopra in particolare fa in modo che il comando venga eseguito Il 1 Gennaio, più ogni Lunedì di gennaio, alle 6:01 di mattina.
Un ulteriore simbolo (* asterisco) può essere usato in ogni istanza per indicare “ogni”. Ad esempio:

01 06 * * * /usr/bin/cartella/comando

Il comando sopra viene eseguito ogni giorno di ogni mese alle 6:01 di mattina.
Altre impostazioni più sofisticate possono essere generate utilizzando virgole e trattini.

Il comando specificato è sempre meglio includerlo con il percorso completo all’eseguibile. Per conoscere il percorso di un comando è sufficiente nel terminale, digitare prima del comando la parola which ad esempio in questo modo:

which ls

Il cronjob impostato nella crontab inizierà a girare non appena verranno salvate le modifiche alla crontab.

Un altro esempio di cronjob potrebbe essere questo:

*/30 * * * * curl http://roccomusolino.com/directory/update.php

Che fa in modo che ogni 30 minuti venga effettuata una richiesta con curl ad un certo script.

CronTab Avanzata

La crontab vista sopra è una crontab per gli utenti. Ogni crontab è associata ad un utente. Ma ci sono altri tipi di crontab, che fanno uso di stringhe speciali, “abbreviazioni” quali:

@reboot -> Esegui una volta, ad ogni avvio.
@yearly -> Esegui una volta all'anno, equivale a "0 0 1 1 *".
@annually -> (Uguale a @yearly).
@monthly -> Esegui una volta al mese, "0 0 1 * *".
@weekly -> Esegui una volta la settimana, "0 0 * * 0".
@daily -> Esegui una volta al giorno, "0 0 * * *".
@midnight -> (Uguale a @daily).
@hourly -> Esegui una volta ogni ora, "0 * * * *".

Ad esempio:

@reboot python /home/pi/MyScript.py &

esegue lo script MyScript.py ogni volta che il sistema si avvia.

Questo vale per qualsiasi sistema Debian-based. Quindi se avete Raspbian su Raspberry Pi, potete automatizzare qualsiasi compito e task in questa maniera.