Come pianificare l'esecuzione dei processi Linux
Sul sistema operativo Linux posso pianificare l'esecuzione automatica di un programma in una particolare data e ora del giorno, oppure a intervalli periodici, utilizzando il servizio cron.
Cos'è cron? E' un servizio di Linux che permette all'utente di automatizzare l'esecuzione dei processi, job e programmi pianificati.
Per configurare il servizio cron si utilizza il comando crontab.
Come funziona Cron su Linux
Il comando crontab crea un file di testo a tabella (cron + tab = crontab) dove sono presenti due informazioni:
- il nome del programma
- le condizioni temporali per eseguirlo
- minuto (0-59)
- ora (0-23)
- giorno del mese (1-31)
- mese (1-12)
- giorno della settimana (0-6)
Ogni minuto il sistema operativo controlla la tabella crontab.
Se le condizioni temporali di esecuzione sono soddisfatte, Linux eseguire il programma pianificato.
Un esempio pratico
Per eseguire il programma /bin/prova.sh alle 12:00 di ogni giorno, aggiungo il seguente record nel file crontab:
0 12 * * * /bin/prova.sh
Il primo valore indica i minuti (0) mentre il secondo valore l'ora (12).
Il terzo, quarto e quinto valore indicano rispettivamente il giorno del mese, il mese dell'anno e il giorno della settimana.
A cosa servono gli asterischi? Nel terzo, quarto e quinto campo ci sono degli asterischi (*). Vuol dire che questi campi non sono da prendere in considerazione. Quindi, non conta quale giorno o mese sia. L'unica condizione da verificare è che siano le ore 12:00.
Quando l'orologio del sistema operativo segna le ore 12:00 il servizio cron esegue il programma /bin/prova.sh.
Alcune informazioni aggiuntive per usare bene crontab
In ogni campo posso anche inserire più valori separati da virgola o dal trattino.
Esempio 1 (virgola)
0 12,15 * * * /bin/prova.sh
In questo caso, il processo viene eseguito alle ore 12:00 e alle ore 15:00.
In pratica all'ora 12 e all'ora 15, nel minuto 00.
Esempio 2 (trattino)
0 12-15 * * * /bin/prova.sh
L'esecuzione avviene in modo continuativo alle 12:00, alle 13:00, alle 14:00, alle 15:00.
In pratica dalle ore 12 alle ore 15, nel minuto 00.
Il comando crontab
La sintassi del comando crontab è la seguente:
Ogni utente ha una tabella crontab personale.
Come pianificare un nuovo processo
Per modificare la mia tabella crontab digito sulla linea di comando:
crontab -e
Il comando apre la tabella con un editor di testo.
Nel mio caso ho scelto di utilizzare l'editor nano.
A questo punto aggiungo una nuova riga.
Ad esempio, pianifico l'esecuzione del programma prova.sh alle 12:00 di ogni giorno.
0 12 * * * /bin/prova.sh
Ora salvo il file premendo i tasti CTRL + O e do invio.
Poi esco dall'editor nano premendo CTRL + X.
Ho pianificato l'esecuzione del processo.
Il sistema operativo eseguirà il programma prova.sh alle 12:00 di ogni giorno.
Come visualizzare i processi pianificati
Per visualizzare i processi che ho pianificato digito il comando crontab con l'opzione -l.
crontab -l
L'opzione -l mostra sulla linea di comando il contenuto del file crontab associato al mio utente.
Come modificare i processi pianificati su crontab
Per modificare i processi che ho pianificato sulla tabella crontab, digito il comando crontab con l'opzione -e.
crontab -l
L'opzione -e apre il file crontab con un editor di testo.
A questo punto lo modifico e poi lo salvo.
Come eliminare la tabella crontab
Per annullare tutti i processi pianificati con il mio profilo utente, digito il comando crontab con l'opzione -r.
crontab -r
L'opzione -r cancella il file crontab del mio utente.
A questo punto non ho più processi pianificati.
Esempi pratici su crontab
Per eseguire un processo ogni anno alla mezzanotte del 1° gennaio.
0 0 1 1 * /processo_da_eseguire
Per eseguire un processo ogni mese alla mezzanotte del primo del mese.
0 0 1 * * /processo_da_eseguire
Per eseguire un processo ogni settimana alla mezzanotte della domenica
0 0 * * 0 /processo_da_eseguire
Per eseguire un processo ogni giorno a mezzanotte.
0 0 * * * /processo_da_eseguire
Per eseguire un processo ogni ora del giorno.
0 * * * * /processo_da_eseguire
E così via.