Spesso capita di aver la necessitร di far partire automaticamente una certa operazione ad un dato momento del giorno o ad un dato giorno della settimana (si pensi, ad esempio, ai processi automatici di backup o di archiviazione dei log). Per fare ciรฒ su Windows utiliziamo lโutilitร di pianificazione (Task Scheduler), su Linux utilizzeremo il crontab.
Indice
I cron job
Grazie a crontab, infatti, possiamo impostare (o, piรน correttamente, schedulare) delle operazioni (job) sul nostro sistema Linux con una certa semplicitร sfruttando il demone cron. Le attivitร pianificate prendono il nome di cron job.
Il โcron daemonโ, infatti, legge il file crontab
ed segue le operazioni ivi impostate (i cron job) al momento specificato ed in modo del tutto automatico.
Ogni utente del nostro O.S. Linux, ovviamente, puรฒ avere la propria versione di questo file; in questo modo, pertanto, possiamo avere diverse operazioni pianificate in esecuzione sullo stesso sistema.
Il comando crontab
La sintassi del comando รจ la seguente:
crontab -u username -opzione
Lโopzione -u
consente di specificare il nome dellโutente che โpossiedeโ il file. Se lโopzione -u
รจ omessa, il sistema presumerร che state operando sul vostro crontab personale.
Lโopzione list (l)
Con lโopzione -l
(list) possiamo vedere il contenuto attuale del nostro crontab. Lโutilizzo รจ questo:
crontab -l
Lโopzione remove (r)
Specificando lโopzione -r
(remove) andremo ad eliminare tutte le operazioni pianificate eventualmente impostate allโinterno del nostro crontab. Cosรฌ:
crontab -r
Lโopzione edit (e)
Con -e
(edit) possiamo inserire, modificare o eliminare cron job dal nostro crontab
. Il comando da utilizzare รจ questo:
crontab -e
Cosรฌ facendo si aprirร automaticamente il nostro editor di testo predefinito (generalmente pico o VI). Se รจ la prima volta che utilizzate crontab puรฒ essere che vi ritroviate di fronte ad una pagina vuotaโฆ andiamo quindi ad inserire la nostra prima operazione pianificata!
Definire le singole operazioni allโinterno del crontab
Allโinterno del nostro crontab
possiamo inserire quante operazioni desideriamo. Ogni operazione (cron job) deve contenere necessariamente lโorario e la data di esecuzione nonchรฉ, ovviamente, lโindicazione del comando che si desidera eseguire. Per inserire piรน operazioni รจ sufficiente andare a capo (ogni operazione occupa una riga).
Per comprendere meglio la sintassi delle operazioni pianificate vediamo un primo semplice esempio:
00 00 * * * /usr/bin/updatedb
Nellโoperazione specificata qui sopra abbiamo detto al nostro demone cron di eseguire il comando โupdatedbโ (specificandone il percorso assoluto) tutti i giorni al minuto 00 dellโora 00, quindi a mezzanotte esatta.
Prima dellโindicazione del comando da eseguire vanno inseriti nellโordine (da sinistra verso destra):
- minuto
- ora
- giorno del mese
- mese
- giorno della settimana
Lโutilizzo dellโasterisco (*) significa โtuttiโ. Se quindi lo utilizziamo al posto del giorno del mese, ad esempio, il comando verrร eseguito tutti i giorni del mese.
Alcune versioni di cron supportano lโoperatore slash (/) che viene utilizzato per pianificare delle ripetizioni. Facciamo un esempio:
*/10 * * * * /usr/bin/updatedb
Nel nostro esempio il valore dei minuti รจ stato impostato come */10; ciรฒ significa che la nostra operazione sarร eseguita ogni 10 minuti.
Eโ anche possibile specificare degli intervalli: per farlo si usa il trattino (-). Facciamo un esempio:
00 15 1-4 * * /usr/bin/updatedb
Nel nostro esempio lโoperazione verrร eseguita alle 15:00 nei primi quattro giorni di ogni mese.
Oltre a slash e trattino possiamo usare anche la virgola (,) la quale viene utilizzata per specificare un elenco. Facciamo un esempio:
30 18 1 3,6,9 * /usr/bin/updatedb
Nel nostro esempio lโoperazione verrร eseguita alle 18:30 del primo giorno del mese di marzo (3), giugno (6) e settembre (9).
Stringhe speciali
Eโ possibile sostituire i primi cinque valori (cioรจ quelli che riguardano data e ora di esecuzione del comando) con delle stringhe โspecialiโ che assolvono al medesimo compito. Queste stringhe sono:
- @reboot โ lancia il comando allโavvio del sistema
- @yearly โ lancia il comando una volta allโanno; corrisponde a โ0 0 1 1 *โ
- @annually โ (analogo @yearly)
- @monthly โ lancia il comando una volta al mese; corrisponde a โ0 0 1 * *โ
- @weekly โ lancia il comando una volta alla settimana; corrisponde a โ0 0 * * 0โ
- @daily โ lancia il comando una volta al giorno; corrisponde a โ0 0 * * *โ
- @midnight โ (analogo @daily)
- @hourly โ lancia il comando una volta allโora; corrisponde a โ0 * * * *โ
Vediamo un esempio di operazione pianificata relativa ad un backup quotidiano:
@daily /usr/bin/backup
Inserire commenti allโinterno del crontab
Eโ anche possibile aggiungere dei commenti allโinterno del crontab per inserire annotazioni utili per successive modifiche o implementazioni relative ai vari cronjob. Lโinserimento di commenti รจ molto semplice: รจ sufficiente inserire una linea di testo il cui primo carattere corrisponde ad un cancelletto (#).
Vediamo un esempio:
# imposto un backup giornaliero
@daily /usr/bin/backup
Soluzioni automatiche per la compilazione del crontab
In rete esistono anche alcuni tool on-line che consentono di scrivere, in modo guidato ed estremamente semplice, delle istruzioni da inserire allโinterno del crontab. Tra gli strumenti di questo genere segnalo il crontab generator disponibile su Toolset.it