Raspberry Pi – CronTab e CronJob
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.
Commenti