Analizziamo crontab, i suoi comandi e le diverse operazioni associate a questo strumento.
Apprenderemo come programmare attività utilizzando l’utility cron e, in conclusione, esamineremo anche alcuni strumenti online utili per la formattazione e la verifica dei comandi cron.
Origine
Crontab è l’abbreviazione di “cron table”. Il termine “cron” deriva dal greco “Chronos”, che significa tempo. Crontab è un processo daemon di sistema che esegue in automatico specifiche attività e processi secondo una pianificazione prestabilita.
Ambiti di Utilizzo
Crontab è uno strumento efficace per automatizzare diverse operazioni, come la gestione dei backup, la rotazione dei file di log, la sincronizzazione di file tra server remoti e la rimozione di cartelle temporanee. In generale, crontab si presta a qualsiasi tipo di compito, ma si rivela particolarmente utile per le attività di amministrazione del sistema.
Un amministratore può pianificare l’esecuzione di un processo in un determinato orario e giorno grazie a cron.
Vediamo, quindi, come configurarlo.
Sintassi di Crontab
L’utilità cron legge file di configurazione per eseguire una serie di comandi. Per interpretare le righe presenti nelle tabelle di configurazione crontab, si segue una precisa sintassi. Crontab ha sei campi: i primi cinque (1-5) definiscono la data e l’ora di esecuzione, mentre il sesto può contenere un nome utente e/o un’attività, processo, comando o script da avviare.
* * * * * NOME_UTENTE COMANDO/SCRIPT DA ESEGUIRE
│ │ │ │ │
│ │ │ │ │
│ │ │ │ |_________ Giorno della settimana (0 – 6, dove 0 è domenica, o usando i nomi dei giorni)
│ │ │ |____________ Mese (1 – 12), * indica ogni mese
│ │ |______________ Giorno del mese (1 – 31), * indica ogni giorno
│ |________________ Ora (0 – 23), * indica ogni ora
|___________________ Minuto (0 – 59), * indica ogni minuto
Note:
- L’asterisco viene utilizzato per indicare tutti i valori possibili per uno specifico campo. Per esempio, un asterisco nel campo dell’ora significa “ogni ora”, mentre nel campo del mese indica “ogni mese”.
Il nome utente è opzionale (e si usa solo nei file crontab di sistema)
Esempi:
Esaminiamo la sintassi con alcuni esempi:
0 5 * * * /scripts/job.sh
1. Pianifica un cron per l’esecuzione alle 5 del mattino di ogni giorno.
0 6,18 * * * /scripts/job.sh
2. Pianifica l’esecuzione di un cron due volte al giorno, alle 6:00 e alle 18:00.
* * * * * /scripts/job.sh
3. Pianifica un cron per l’esecuzione ogni minuto.
0 19 * * mon /scripts/job.sh
4. Pianifica un cron per l’esecuzione ogni lunedì alle 19:00.
*/10 * * * * /scripts/job.sh
5. Pianifica un cron per l’esecuzione ogni 10 minuti.
* * * feb,giu,ott * /script/job.sh
6. Pianifica un cron per l’esecuzione nei mesi specificati (febbraio, giugno e ottobre).
25 7 4 3 * /home/script/backup.sh
7. Esegue lo script shell /home/script/backup.sh il 4 marzo alle 7:25.
8. Pianifica un cron per l’esecuzione ogni 30 secondi.
- Poiché non è possibile impostare i secondi direttamente in Crontab, si può ottenere lo stesso risultato con un processo a due passaggi.
* * * * * /home/scripts/script.sh
- Innanzitutto, si programma un’attività che venga eseguita ogni minuto.
* * * * * sleep 30; /home/scripts/script.sh
Ora si utilizza il comando “sleep” per mettere in pausa l’esecuzione per 30 secondi.
L’attività si fermerà per 30 secondi e poi riprenderà.
Tipi di file di configurazione di Cron
Ci sono due tipi di file di configurazione di Cron:
Il Crontab di sistema UNIX/Linux
Questo richiede privilegi di root, perché viene generalmente usato per servizi di sistema e attività critiche. Il sesto campo (nella descrizione della sintassi vista prima) indica il nome di un utente per l’esecuzione del comando. Questo permette al crontab di sistema di eseguire i comandi a nome di qualsiasi utente.
Il Crontab dell’utente
Un utente può impostare i propri processi cron usando il comando “crontab”. In questo caso, il sesto campo (sempre nella descrizione della sintassi) è il comando da eseguire. Tutti i comandi vengono eseguiti dall’utente che ha creato il crontab. Ogni utente può avere il proprio file crontab. Questi file sono salvati in /var/spool/cron/crontabs, ma non sono pensati per essere modificati direttamente. Si deve usare il comando “crontab” per modificare o impostare i propri processi cron.
Come funziona? Il servizio cron (daemon) viene eseguito in background e verifica in continuazione (ogni minuto) il file /etc/crontab e le directory /etc/cron.*. Controlla anche la directory /var/spool/cron/. I comandi vengono eseguiti da cron
quando i campi di minuti, ore e mesi corrispondono all’ora attuale e almeno uno dei campi dei due giorni (giorno del mese o giorno della settimana) corrisponde al giorno corrente.
Comandi Base
Elenco dei processi Cron esistenti
crontab -l
Possiamo visualizzare tutti i processi cron senza aprire il file di configurazione usando il comando seguente:
[[email protected] ~]# crontab -l no crontab for winadmin.it [[email protected] ~]#
Se non sono presenti lavori esistenti, il comando mostrerà l’output seguente:
[[email protected] ~]# crontab -l # Edit this file to introduce tasks to be run by cron. # # Each task to run has to be defined through a single line # indicating with different fields when the task will be run # and what command to run for the task # # To define the time you can provide concrete values for # minute (m), hour (h), day of month (dom), month (mon), # and day of week (dow) or use '*' in these fields (for 'any').# # Notice that tasks will be started based on the cron's system # daemon's notion of time and timezones. # # Output of the crontab jobs (including errors) is sent through # email to the user the crontab file belongs to (unless redirected). # # For example, you can run a backup of all your user accounts # at 5 a.m every week with: # 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/ # # For more information see the manual pages of crontab(5) and cron(8) # # m h dom mon dow command 0 */1 * * * /home/account/scripts/updateAccountStatuses.sh 0 */1 * * * /home/account/scripts/reActivateAccountStatus.sh [[email protected] ~]#
Se l’utente ha già aggiunto alcuni processi, questi verranno mostrati in questo modo.
La tabella cron è specifica per ogni utente, ciò significa che per visualizzare la lista della tabella cron è necessario accedere con un determinato utente.
Elenca Cron per uno specifico utente
Per visualizzare i processi pianificati di un altro utente, si utilizzano le opzioni “-u” (Utente) e “-l” (Lista).
crontab -u altro_nomeutente -l
Esempio: crontab -u winadmin.it -l
Aggiungi/Modifica voci Crontab
Per modificare una voce crontab, si usa l’opzione “-e”, come mostrato di seguito.
crontab -e
Il comando precedente apre l’editor vi, nel quale si specificano i dettagli del processo e si salva il file. Una volta salvato, è possibile verificare se cron è configurato con il comando “crontab -l”.
Aggiungi/Modifica voci Crontab per utenti specifici
crontab -u altro_nomeutente -e
È possibile modificare il crontab per un altro utente usando il comando seguente:
Esempio: crontab -u winadmin.it -e
Rimuovi la voce Crontab
Si utilizza il parametro -r con “crontab” per rimuovere tutti i processi pianificati senza conferma.
crontab -r
crontab -i -r
[[email protected] ~]# crontab -i -r crontab: really delete winadmin.it's crontab?
Per avere una conferma prima di rimuovere i processi, si usa l’opzione -i insieme a “-r”, che richiederà una conferma all’utente prima di cancellare il crontab dell’utente.
Stringhe Speciali Crontab
Oltre alla sintassi descritta, si possono utilizzare otto stringhe speciali offerte da Crontab, che rendono più rapida e leggibile la definizione dei processi.
Stringa Speciale
Descrizione
@reboot
Esegue una volta, dopo l’avvio.
@yearly
Esegue una volta all’anno, cioè 0 0 1 1 *
@annually
Come @yearly
@monthly
Esegue una volta al mese, cioè 0 0 1 * *
@weekly
Esegue una volta alla settimana, cioè 0 0 * * 0
@daily
Esegue una volta al giorno, cioè 0 0 * * *
@midnight
Come @daily
@hourly
Esegue una volta all’ora, cioè 0 * * * *
Esempi di stringhe speciali Crontab
1. Crontab per pianificare attività con cadenza annuale.
@yearly /scripts/greeting.sh
Il comando sopra può essere usato, per esempio, per inviare un saluto di Capodanno: verrà eseguito al primo minuto di ogni anno.
2. Crontab per pianificare attività con cadenza mensile.
@monthly /scripts/cleanup.sh
Il comando sopra può essere usato per eseguire operazioni di pulizia all’inizio di ogni mese.
Allo stesso modo, possiamo usare altre stringhe speciali Crontab per attività settimanali, giornaliere e orarie.
Directory Cron
- L’amministratore di sistema può usare una pianificazione cron di sistema nella directory predefinita, come mostrato qui sotto:
- /etc/cron.d
- /etc/cron.daily
- /etc/cron.hourly
- /etc/cron.monthly
/etc/cron.weekly
Esempi pratici di Crontab
Analizziamo alcuni esempi pratici, che generalmente vengono utilizzati da un amministratore di sistema o da professionisti IT.
Elimina file e directory vuoti
45 0 * * * winadmin.it trova /tmp -type f -empty -delete
L’espressione cron sopra indicata troverà i file e le directory vuote nella directory /tmp e li eliminerà. Questo processo verrà eseguito alle 00:45 ogni giorno. È necessario specificare il nome utente che eseguirà il lavoro. Nell’esempio, l’utente winadmin.it esegue l’attività cron.
Esegui più attività con un singolo cron
* * * * * /home/scripts/backup.sh; /home/script/scritp.sh
Più attività/processi possono essere separati usando un punto e virgola (;) e possono essere assegnati a una singola espressione cron.
Strumenti di formattazione e test di Cron
Abbiamo esaminato i comandi e la sintassi di crontab per la programmazione di un’attività. Ma se non sei un amministratore di sistema e il tuo lavoro non è la configurazione di Cron, potresti avere difficoltà a ricordare la sintassi e potresti commettere degli errori. Non preoccuparti, abbiamo una soluzione a questo problema.
Ci sono diversi strumenti di formattazione Cron disponibili online.
Questo strumento offre un’interfaccia grafica molto intuitiva, dove si possono specificare i minuti, i giorni e il percorso dello script per generare il crontab.
Prendiamo un esempio: devo eseguire “/home/processMonitor.sh” ogni 5 minuti dal lunedì al venerdì.
In questo caso, ho generato la seguente sintassi Cron da inserire nel mio crontab tramite il comando “crontab -e”:
0,5,10,15,20,25,30,35,40,45,50,55 * * * 1-5 /home/processMonitor.sh
È un pratico strumento web per la pianificazione dei processi cron. Si può creare un processo cron specificando un URL da richiamare e si può definire l’ora di esecuzione. Inoltre, è possibile specificare un’espressione cron o aggiungerla manualmente da un form. È anche possibile utilizzare l’autenticazione HTTP di base per un livello minimo di sicurezza.
Oltre a questo, Easycron può essere utilizzato per altri scopi, come ad esempio la generazione di espressioni Cron standard, l’analisi dei registri di esecuzione dei processi Cron, l’invio di notifiche email, la gestione di registri di errori separati, ecc.
È un altro valido strumento per generare crontab e con questo strumento si può specificare se si vuole salvare l’output di cron in un file o inviarlo via email.
È un semplice editor di espressioni di pianificazione cron online. Fornisce anche uno strumento utile per monitorare i cronjob. Si deve solo copiare un comando e aggiungerlo alla fine della definizione del crontab. Nel caso in cui il processo cron fallisse o non si avviasse, si riceve una email di notifica.
Nell’esempio, il lavoro verrà eseguito alle 04:05 di ogni giorno, di ogni mese e di ogni settimana.
Questo strumento consente di verificare le definizioni di ora/data di cron. Può capitare di dover decodificare la sintassi di cron esistente per la risoluzione dei problemi o semplicemente si vuole effettuare un test.
Per fare ciò, si può utilizzare questo strumento. Si deve semplicemente copiare e incollare l’espressione cron nel campo di definizione, scegliere il numero di iterazioni e fare clic su “Test” per visualizzare le date di esecuzione.