Pianificare operazioni in automatico su Linux: guida a crontab
- a cura di: maurotramonti
- Commenti:
- Letture:
- Aggiornato: 04/07/2023, 11:30
- Pubblicato: 06/07/2023, 00:00
Per tutti gli articoli e le guide che riguardano il sistema operativo open source per eccellenza, sfoglia il "Canale Linux".
Soprattutto se avete già un minimo di esperienza nell'ambito dei server Linux, avrete probabilmente sentito la necessità di pianificare delle azioni che avvengano in automatico senza dover impartire i comandi da remoto: aggiornare l'IP del DNS dinamico, rinnovare il certificato HTTPS, ripulire la cartella di log, riavviare il webserver, eccetera.
Fortunatamente, è disponibile un comodo strumento che permette di gestire il tutto in maniera centralizzata ed efficiente: crontab.

Normalmente, crontab dovrebbe essere già presente nelle distribuzioni Linux più diffuse. Tuttavia, nel caso in cui così non fosse, è possibile installarlo con questo comando:
sudo apt install cron
Tutte le operazioni pianificate si trovano in uno dei file di configurazione di crontab; ne può esistere uno per ogni utente del sistema.
Nota: i comandi pianificati nel crontab di un dato utente verranno eseguiti con i suoi privilegi; perciò, per eseguire script o comandi che richiedono i privilegi di root, dovrete andare a modificare il crontab dell'utente root, anteponendo "sudo" ai comandi successivi.
Per verificare l'esistenza di un file di crontab per il vostro utente, impartite:
crontab -l
Se non vi siete mai interessati dell'argomento, la risposta più probabile sarà "no crontab for <nomeutente>".
A questo punto, potete creare o modificare il vostro file di configurazione con il comando:
crontab -e
Vi verrà mostrata una lista di editor di testo tra cui scegliere per modificare il file; probabilmente vi sarà consigliato di scegliere nano, poiché è ritenuto più semplice da usare rispetto ad altri editor come Vim, almeno per quanto riguarda l'utente medio.

Inoltre, come potete notare, è sempre possibile cambiare la propria scelta aggiungendo l'opzione "select-editor" al comando.
Una volta arrivati qui, avrete davanti un semplice file di testo che, per il momento, dovrebbe contenere solo alcuni commenti con istruzioni e informazioni sulla sintassi e sul funzionamento del programma.
Ogni operazione pianificata è rappresentata da una riga, che a sua volta è divisa in due parti: la prima, che contiene le istruzioni temporali per stabilire in quali momenti eseguire il comando, mentre la seconda è costituita dal comando stesso.
In particolare, nella prima parte abbiamo cinque "campi" da riempire:
Ognuno di questi valori può anche essere sostituito con un asterisco (*), per indicare qualsiasi valore (ad esempio, un asterisco nel numero del mese significa che il comando verrà eseguito ogni mese nel giorno x, all'ora y e al minuto z).
Per inserire valori multipli, è necessario separarli con una virgola (ad esempio, inserire "2,5,7" nella colonna del giorno del mese significa che il comando sarà eseguito il 2, il 5 e il 7 di gennaio, febbraio, ecc...).
Nella seconda parte della riga, andrete ad inserire il percorso completo dello script/programma da eseguire. Proponiamo come esempio una riga per cancellare tutti i download vecchi di un mese in automatico:
0 12 1 * * /home/user/cancella-download.sh
Se analizziamo la riga, capiamo che lo script indicato nella seconda parte di essa (che supponiamo contenga istruzioni per rimuovere i file della cartella Download) sarà eseguito:
Quando avete terminato, salvate e chiudete il file e riavviate il servizio con il comando:
sudo service cron restart
Per semplificare il processo, è possibile utilizzare, in alcuni casi, delle stringhe già pronte che sostituiscono i cinque parametri numerici. Esse sono:
@reboot (ad ogni riavvio)@yearly o @annually (il primo gennaio di ogni anno)@monthly (il primo giorno di ogni mese)@weekly (ogni domenica a mezzanotte)@daily o @midnight (allo scoccare di ogni mezzanotte)@hourly (allo scoccare di ogni ora)