Creare un cron job è un operazione utile in tantissimi casi.
Un cron job non è nient’altro che un’azione che verrà eseguita in un determinato momento oppure ogni tot di tempo, da un programma che è costantemente in esecuzione nel sistema operativo e che si chiama cron.
La guida che ti presento è scritta per Ubuntu 18:04 ma ogni sistema Unix/Linux e anche MacOS ha il suo bel cron che gira e che ci permette di usare.
Partiamo con il dire che utilizzeremo un file dal nome crontab
.
Questo file ci permetterà di configurare in modo molto più semplice il nostro cron job, rispetto ad utilizzare direttamente la struttura di cron.
Ti ricordo che in qualunque momento puoi vedere il manuale eseguendo il comando
man 5 crontab
oppure consultando la sezione wiki apposita di Ubuntu.
Il sistema ha un suo file cron che è presente in /etc/crontab
ma ogni utente può creare il suo, per questo motivo, se hai necessità di eseguire comandi in root, che quindi necessitano dei privilegi di amministratore, sarebbe più corretto che facessi il login come amministratore, prima di creare il file crontab
.
Per modificare un file crontab
ti basterà scrivere
crontab -e
Una volta scritto il tuo comando nel crontab
, salva il file e controlla che sia stato inserito correttamente digitando:
crontab -l
In questo modo comparirà una lista di job per l’utente corrente.
Sintassi del comando
Il file crontab
deve rispettare una sintassi precisa, la prima parte riguarda quando il comando deve essere eseguito e segue una formattazione come questa:
- minuti, da 0 a 59 (m);
- ore, da 0 a 23 (h);
- giorno del mese, da 1 a 31 (dom);
- mese, da 1 a 12 (mon);
- giorno della settimana, da 0 (Domenica) a 6 (Sabato) (dow).
Quindi per eseguire un aggiornamento dei pacchetti del sistema ogni giorno alle 2:10 troveremo una riga, nel nostro crontab
simile a questa:
10 2 * * * /usr/bin/apt-get update
L’asterisco ci permette di non specificare nessun valore
Caso specifico
Nel mio caso specifico mi occorreva aggiornare i certificati SSL generati in wildcard, e per fare questo dovevo inserire un comando specifico. Quindi ho scritto il comando completo per rigenerare i certificati (che era molto lungo) in un file sotto la cartella home dell’utente, era una cosa più o meno così:
certbot renew --dns-route53 --logs-dir /home/username/letsencrypt/log/ --config-dir /home/username/letsencrypt/config/ --work-dir /home/username/letsencrypt/work/ --non-interactive --server https://acme-v02.api.letsencrypt.org/directory --post-hook "sudo service nginx reload"
Successivamente ho aperto il file crontab
e inserito
0 0 * * * ./ ~/username/filedaeseguire.sh
In questo modo ogni giorno a mezzanotte il mio job proverà ad aggiornare il mio certificato SSL
Altri esempi d’uso dei tempi
Stringa | Descrizione |
12 05 * * * | tutte le mattine, più o meno alle 5 |
12 05 15 * * | tutti i 15 del mese, alla stessa ora |
12 05 31 * * | 7 volte l’anno, alla stessa ora |
0 12 * * 1 | ogni lunedì, a mezzogiorno |
1 0 * * * | ogni giorno, più o meno a mezzanotte |
01 05 * * 2,4 | ogni Martedì e Giovedì, alle 5 del mattino circa |
Inoltre ci sono altri parametri speciale, ad esempio:
*/5 9-17 * * mon,tue,wed,thu,fri
Questo viene eseguito ogni 5 minuti dalle 9 alle 17 dal Lunedì al Venerdì.
Per altri comandi ti consiglio di vedere la guida che ti ho messo all’inizio dell’articolo
Grazie per aver letto l’articolo, le informazioni che ho messo sono tutt’altro che difficili da reperire e sono anche un po’ ridondanti, ma ho voluto comunque scriverlo per farmi un appunto di quello che avevo imparato. 👋