cron vs at, eseguire script a tempo su Raspberry Pi

time

L’utilità principe della Raspberry Pi è quella di poter sfruttare i contatti GPIO per eseguire delle operazioni, sia di natura analogica sia digitale.

[AMAZONPRODUCTS asin=”B00T2U7R7I”] [AMAZONPRODUCTS asin=”B006DXC91Q”]

Questo presuppone di dover compilare del software che si occupi di far dialogare l’hardware della scheda lampone con il suo sistema operativo debian-based. A tale scopo semplici script scritti in linguaggio Python possono assolvere a tale incarico, supportati anche da un vasto bacino di librerie di supporto all’hardware dedicato per Raspberry Pi.
Un percorso comune quando si ha a che fare con schede programmabili per compiere delle operazioni, che siano micro controllori come Arduino, o micro processori come Raspberry Pi, per citare i più famosi, è stabilire una routine temporale entro cui quella operazione si dovrà compiere o ripetere.

In quest’ottica un approccio, fortemente centralizzato su sistema operativo Debian, relega la configurazione di una routine al solo comando cron. Ne ho già fornito un esempio in un articolo precedente riguardante la lettura di Temperatura e Umidità da un sensore DHT-11 con Raspberry Pi.

Spiegare come funziona il comando cron sarebbe molto dispersivo e richiederebbe un approfondimento piuttosto lungo.

crontab

Ma tagliamo la testa al toro e navighiamo sul sito http://www.corntab.com/pages/crontab-gui dove potremo trovare un’efficacissima interfaccia visuale per generare il nostro script cron. Con la RaspBerry Pi poi il gioco è semplice perchè il file crontab che contiene la lista di tutti i processi automatizzati del nostro utente si può richiamare ed editare semplicemente con il comando:

crontab -e

Modificando il file con editor di testo, magari avendo prima fatto l’accesso come amministratore da terminale (comando su o sudo), potremo inserire la stringa riguardante il processo che vogliamo impostare copiandola dall’interfaccia visuale prima linkata.

sudo reboot

Dopo le modifiche e salvataggio, bisogna riavviare per far partire il timer di cron.

Un puro parere personale dovete concedermelo, cron a me proprio non piace. È uno strumento decisamente potente e altamente configurabile, ma non immediato, inoltre bisogna sempre essere attenti ad apportare le modifiche come amministratori. Un utente alle prime armi potrebbe di sicuro cadere nella disperazione difronte ad uno script finalmente funzionante ma una mission impossible da far cronicizzare da cron.

In soccorso ci viene un approccio molto più old style direttamente dagli albori della command-line unix, ovvero il comando at.

Installiamolo da terminale con:

sudo apt-get install at

Vediamo qualche dettaglio:

at 23:30 -m

con questo comando stiamo indicando che alle 23.30 dobbiamo far eseguire un comando e con -m richiediamo una mail di conferma a processo terminato.

Successivamente si apre il prompt interno at> e dobbiamo ora inserire il comando da eseguire, per esempio:

at> play /usr/sounds/music.mp3
at> <EOT>
job 2 at 2015-11-25 23:30

stiamo chiedendo di eseguire un brano musicale mp3, successivamente con Ctrl+D ci viene restituito il numero del job e data/ora.

Alternativamente possiamo eseguire direttamente tale comando:

at 23:32 -m -f /usr/local/bin/script

con -f che introduce il percorso del file da eseguire alle 23.32, in output otteniamo direttamente il numero di job e data/ora.

Con il comando:

at -l

otteniamo l’elenco dei processi impostati, possiamo rimuovere il job 2 con il comando:

atrm 2

Il formato dell’ora può anche essere quello inglese (AM/PM), i giorni possiamo indicarli come MMDDYY o MM/DD/YY o DD.MM.YY.

Per indicare un processo che si deve ripetere più di una volta dovremo aggiungere all’ora della prima esecuzione il periodo che deve intercorrere fino alla prossima esecuzione, per esempio:

at 4pm  + 3 days

ovvero esecuzione alle 4 di pomeriggio dopo tre giorni.

Ho riassunto molto tralasciando applicazioni più specifiche prediligendo una visione di insieme più generica. Le funzionalità tra i due comandi (cron e at) differiscono nella sostanza secondo me, infatti se dovessimo eseguire una routine sistematica con continuità preferirei usare cron, per una esecuzione programmata unica invece preferirei at per l’immediatezza dei comandi.

Per dubbi, approfondimenti, correzzioni…lasciatemi pure un commento.

Fonte: http://www.brunolinux.com/02-The_Terminal/The_at_Command.html

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.