Linux / Come Usare Crontab

In Linux, usando crontab puoi eseguire ripetutamente comandi o script a tempi specificati. Con crontab -e, puoi modificare le attività pianificate dell'utente corrente, inserendo cinque campi temporali e il comando da eseguire in una sola riga.

Differenza tra cron e crontab

cron è un servizio che controlla ed esegue regolarmente compiti programmati. crontab è un elenco di compiti che registra tempi di esecuzione e comandi, generalmente gestito separatamente per ogni utente. Gli esempi in questo articolo si basano sul crontab utente tipico delle serie Debian e Ubuntu. I metodi di installazione, i nomi dei servizi e le funzionalità supportate possono differire a seconda della distribuzione e dell'implementazione di cron.

I compiti programmati vengono eseguiti con i privilegi del proprietario del corrispondente crontab. Se sono necessari privilegi non posseduti dall'utente corrente, impostare attentamente l'amministratore e l'account di esecuzione, e non creare compiti con privilegi eccessivamente ampi. I compiti programmati per un orario in cui il computer è spento o il servizio cron è fermo non verranno eseguiti.

Controllo e Modifica del Crontab

Nel terminale, usa il seguente comando per controllare le attività programmate dell'utente corrente. Se appare un messaggio che indica che non c'è alcuna lista, significa che questo utente non ha ancora un crontab.

crontab -l

Per aggiungere o modificare le attività, esegui il seguente comando. La schermata di selezione dell'editor potrebbe apparire la prima volta che lo esegui. Dopo aver salvato il file ed essere uscito dall'editor, cron controllerà la sintassi e installerà la nuova lista. Se appare un errore, modificalo di nuovo secondo le istruzioni e conferma che viene visualizzato il messaggio di installazione.

crontab -e

Le attività pianificate per l'account amministratore sono separate da quelle dell'utente corrente. Modifica solo l'elenco di root con sudo crontab -e e controllalo con sudo crontab -l quando sono necessari i privilegi amministrativi. Non confondere le due liste.

Per rimuovere una singola attività, elimina solo quella riga con crontab -e e salvala. crontab -r elimina l'intero elenco delle attività pianificate dell'utente corrente, quindi controlla l'elenco prima di utilizzarlo e, se necessario, esegui un backup in una posizione sicura. Puoi eseguire il backup con crontab -l > ~/crontab-backup.txt e, se necessario, reinstallare l'intero file con crontab ~/crontab-backup.txt. Il ripristino sovrascriverà l'elenco corrente, quindi verifica prima eventuali modifiche.

Formato dell'orario pianificato

Ogni lavoro in un crontab utente consiste di cinque campi temporali seguiti dal comando. Nei file crontab di sistema come /etc/crontab o /etc/cron.d/, viene aggiunto un ulteriore campo dell'utente esecutore tra i campi temporali e il comando, quindi non copiare il formato sottostante così com'è.

minute hour day-of-month month day-of-week command
Campo Intervallo consentito Significato
minuto 0–59 Minuto
ora 0–23 Ora
giorno-del-mese 1–31 Data
mese 1–12 Mese
giorno-della-settimana 0–7 Giorno della settimana. 0 e 7 sono domenica

* si riferisce a tutti i valori nel campo. Una virgola specifica valori multipli (10,20), un trattino specifica un intervallo (1-5) e una barra specifica intervalli all'interno di un intervallo (*/10). Per esempio, */10 nel campo dei minuti significa 0, 10, 20, 30, 40, 50 minuti ogni ora. Gli intervalli sono interpretati all'interno di ciascun campo, quindi non garantiscono sempre la stessa spaziatura basata sul tempo trascorso.

Se sia il giorno del mese che il giorno della settimana sono limitati, cron su Debian esegue il comando quando si verifica una delle due condizioni. Ad esempio, 0 4 1 * 1 viene eseguito alle 4 del mattino il primo giorno del mese e ogni lunedì, non solo quando il primo è un lunedì. Consulta man 5 crontab o la documentazione Debian sul formato crontab per maggiori dettagli.

Esempi di lavori pianificati

Sostituisci /home/user/bin/backup.sh nell'esempio seguente con il percorso assoluto dello script effettivo. L'utente deve avere accesso allo script e ai file di destinazione e, se esegue lo script direttamente, sono necessari anche i permessi di esecuzione e la corretta specifica dell'interprete. Per prima cosa, eseguilo nel terminale con lo stesso account per verificare i risultati.

0 4 * * * /home/user/bin/backup.sh
0 4 * * 1-5 /home/user/bin/backup.sh
*/10 4 * * * /home/user/bin/backup.sh

La prima riga viene eseguita ogni giorno alle 4 del mattino, la seconda riga viene eseguita dal lunedì al venerdì alle 4 del mattino e la terza riga viene eseguita ogni 10 minuti dalle 4:00 alle 4:50 del mattino. Gli esempi sono programmi indipendenti. Quando tutti vengono inseriti, tutti i compiti su ciascuna riga saranno registrati.

Registra e testa un lavoro in sicurezza

Quando si pratica, invece di un vero backup, prova a usare un compito che lasci un record nella directory home dell'utente corrente.

  1. Esegui crontab -e, aggiungi la seguente singola riga, quindi salva ed esci. La data e l'ora saranno aggiunte al file ogni minuto.
* * * * * /bin/date >> "$HOME/cron-test.log" 2>&1
  1. Esegui crontab -l per controllare l'entry installata. Dopo 1-2 minuti, esegui cat ~/cron-test.log e verifica che sia stato aggiunto un record.
  2. Una volta confermato, elimina solo la voce della pratica con crontab -e e salva. Puoi eliminare il file di log dopo averne controllato il contenuto.

Se la pratica non funziona, verifica se il servizio cron è installato e in esecuzione. In un pacchetto cron tipico di Ubuntu, puoi visualizzare lo stato con systemctl status cron. Il nome del servizio e la posizione del log variano a seconda della distribuzione e, in un ambiente Ubuntu che utilizza il journal di systemd, puoi controllare i log del servizio con journalctl -u cron.

Punti da controllare quando non funziona

cron può essere eseguito in un ambiente diverso dalla shell di login. Specifica comandi e script con percorsi assoluti ogni volta che è possibile e definisci chiaramente le variabili d'ambiente richieste e le directory di lavoro nello script. Per controllare gli errori, puoi anche reindirizzare l'output e gli errori del lavoro a un file di log accessibile all'utente. Poiché i log possono contenere informazioni sensibili, fai attenzione ai permessi di accesso e ai periodi di conservazione.

Verifica se l'orario di sistema e il fuso orario sono quelli attesi, se l'account di esecuzione può accedere ai file e se c'è la possibilità di esecuzioni sovrapposte. Il carattere % nei comandi è trattato in modo speciale da cron; per passarlo letteralmente, in genere bisogna usare \%. Controlla la documentazione del cron che stai utilizzando per il comportamento esatto.