Ricerca nel sito web

Come usare Cron su Linux: suggerimenti, trucchi ed esempi


La tua guida definitiva ai cron job e al crontab su Linux. Dalle nozioni di base ai suggerimenti avanzati, scopri tutto ciò di cui hai bisogno per pianificare con successo.

I lavori Cron sono uno strumento fondamentale ma potente all'interno del sistema operativo Linux. Questi pianificatori di lavoro basati sul tempo sono indispensabili per amministratori di sistema, sviluppatori e appassionati di tecnologia, poiché consentono l'automazione delle attività di routine.

Questo articolo è progettato per demistificare i lavori cron. Offre una guida completa che spiega cosa sono i lavori cron, come funzionano e, soprattutto, come utilizzarli per automatizzare attività ripetitive sul tuo sistema Linux.

Quindi, se il tuo obiettivo è impostare file di backup automatici, eseguire script in orari specifici o automatizzare i tuoi progetti personali, questo articolo ti mostrerà come i processi cron rendono tutto ciò possibile. Quindi tuffiamoci!

Cos'è Cron?

Cron è un pianificatore di lavori basato sul tempo nei sistemi operativi simili a Unix, inclusi Linux e macOS. Consente agli utenti di pianificare processi (comandi o script) da eseguire periodicamente a orari, date o intervalli fissi.

Viene comunemente utilizzato per automatizzare le attività di manutenzione o amministrazione del sistema, ma può essere utilizzato per qualsiasi scopo che richieda l'esecuzione regolare e pianificata dei comandi.

Come funziona Cron

Il componente principale in background è il demone cron, chiamato crond. Il suo compito principale è verificare le attività pianificate ed eseguirle quando arriva l'orario specificato.

Il demone si attiva ogni minuto per verificare la presenza di lavori nei file crontab o nella configurazione basata su directory. Questo ci porta naturalmente al successivo aspetto critico di Cron che è alla base della sua configurazione operativa: i file e le directory che utilizza.

File e directory Cron

I file Crontab sono il cuore del sistema di pianificazione dei lavori cron. "Crontab" sta per "tabella cron", poiché questi file contengono un elenco di comandi da eseguire a orari programmati.

Ogni riga in un file crontab rappresenta un lavoro separato e include informazioni su quando eseguire il lavoro seguite dal comando da eseguire.

Essenzialmente, i file crontab sono disponibili in due varietà: quelli di proprietà dei singoli utenti e il "/etc/crontab" a livello di sistema. Di seguito sono riportati i dettagli chiave di cui dovresti essere a conoscenza riguardo ad entrambi.

Ma prima, qualcosa di importante da chiarire. I file cron appartenenti ai singoli utenti non vengono conservati nelle loro directory home ma si trovano invece nella directory “/var/spool/cron”. Allo stesso tempo, i file di lavoro cron per i servizi e le applicazioni di sistema vengono generalmente inseriti in "/etc/cron.d ".

Crontab utente

I crontab utente sono personali per ciascun utente su un sistema. Gli utenti possono avere il proprio file crontab per pianificare le attività con il proprio ID utente.

Il vantaggio principale dei crontab utente è che consentono ai singoli utenti di gestire la pianificazione dei propri lavori senza richiedere privilegi amministrativi.

Crontab a livello di sistema

A differenza dei file crontab specifici dell'utente, "/etc/crontab" è un file di configurazione a livello di sistema. Segue un formato leggermente diverso dai crontab utente includendo un campo utente che specifica l'account utente con cui deve essere eseguito il comando.

Ciò consente agli amministratori di sistema di pianificare i lavori da eseguire con qualsiasi utente senza modificare il crontab di quell'utente, consentendo una maggiore flessibilità nella gestione delle attività tra diversi account utente.

Generalmente, il file “/etc/crontab” viene generalmente utilizzato per lavori che devono essere eseguiti con privilegi amministrativi o che sono essenziali per il funzionamento del sistema.

Un altro punto importante è che mentre gli utenti possono modificare le proprie voci crontab, il crontab a livello di sistema può essere modificato direttamente solo da un utente root.

Le directory di Cron

Oltre ai file crontab, la maggior parte dei sistemi Linux include una serie di directory che vengono scansionate da cron per i lavori pianificati: "/etc/cron.daily", "/etc/cron.hourly", "/etc/cron.weekly" e "/etc/cron.monthly".

Queste directory consentono una pianificazione più semplice delle attività che devono essere eseguite regolarmente senza specificare gli orari esatti in un crontab.

Gli script e i file eseguibili inseriti in queste directory vengono eseguiti rispettivamente una volta al giorno, all'ora, alla settimana o al mese. L'ora esatta in cui vengono eseguiti gli script in queste directory è determinata dalla configurazione trovata in "/etc/crontab" o dal file di configurazione del demone, solitamente situato in "/etc/cron.d/ ."

Nozioni di base sulla sintassi Cron

Un processo cron è definito da una riga di testo in un file Cron (crontab). Ogni riga è composta da una serie di campi separati da spazi o tab, seguiti da un comando o da uno script da eseguire. La sintassi di base per un processo cron è la seguente:

minute hour day_of_month month day_of_week command_to_execute

Esaminiamo ogni componente:

Minuto (0-59)

Questo campo specifica il minuto in cui verrà eseguito il comando. Può essere un valore compreso tra 0 e 59. Ad esempio, impostandolo su 0 il comando verrà eseguito all'inizio dell'ora.

Ora (0-23)

Il campo dell'ora è specificato nel formato 24 ore. Determina a quale ora del giorno viene eseguito il comando. Ad esempio, impostandolo su 14 il comando verrà eseguito alle 14:00.

Giorno del mese (1-31)

Questo campo specifica il giorno del mese in cui verrà eseguito il comando. Può assumere qualsiasi valore compreso tra 1 e 31, a seconda del numero di giorni del mese. Ad esempio, impostandolo su 1 il comando verrà eseguito il primo giorno di ogni mese.

Mese (1-12)

Il campo mese determina in quale mese verrà eseguito il comando. Può essere un valore compreso tra 1 (gennaio) e 12 (dicembre). Ad esempio, impostandolo su 12 il comando verrà eseguito a dicembre.

Giorno della settimana (0-6)

Questo campo specifica il giorno della settimana in cui deve essere eseguito il comando. Può essere un valore compreso tra 0 (domenica) e 6 (sabato). Ad esempio, impostandolo su 5 il comando verrà eseguito ogni venerdì.

Comando o script

Infine, il campo comando o script è dove specifichi quale azione deve eseguire il processo cron. Potrebbe trattarsi di qualsiasi comando o percorso di un file di script che il demone Cron eseguirà all'ora specificata.

Caratteri speciali nella sintassi Cron

La sintassi di Cron supporta anche caratteri speciali per specificare modelli di pianificazione più complessi:

  • Asterisco (*): rappresenta "ogni" unità di tempo. Ad esempio, "*" nel campo dell'ora significa "ogni ora".
  • Virgola (,): consente di specificare un elenco di valori. Ad esempio, "1,3,5" nel campo day_of_week significa "esegui lunedì, mercoledì e venerdì".
  • Trattino (-): specifica un intervallo di valori. Ad esempio, "9-17" nel campo dell'ora significa "ogni ora dalle 9:00 alle 17:00".
  • Barra (/): specifica gli incrementi. Ad esempio, "*/10" nel campo dei minuti significa "ogni 10 minuti".

Oltre a questi, i lavori cron hanno stringhe di scelta rapida speciali che possono sostituire i cinque campi per ora e data. Queste scorciatoie forniscono un modo rapido per specificare la stessa pianificazione che altrimenti richiederebbe una rappresentazione numerica.

@reboot

Esegue il comando specificato una volta all'avvio.

@yearly,
@annually

Entrambi eseguono l'attività specificata ogni anno alle 00:00 del 1° gennaio. Equivalente a specificare "0 0 1 1 * "

@monthly

Esegue il lavoro una volta al mese, il primo giorno alle 00:00. Equivalente a “0 0 1 * * ”

@weekly

Esegue il lavoro una volta alla settimana alle 00:00 di domenica. Equivalente a “0 0 * * 0 ”

@daily,
@midnight

Entrambi eseguono il cronjob ogni giorno alle 00:00. Ciò equivale a specificare “0 0 * * * ” nel file crontab.

@hourly

Esegue il lavoro all'inizio di ogni ora. Equivalente a “0 * * * * ”

Quando inizia un processo Cron?

Il sistema cron controlla crontab ogni minuto. Esegue le attività quando il tempo impostato (minuti, ore e mesi) si allinea con l'ora effettiva. Inoltre, controlla il giorno: se la data specifica del mese o il giorno della settimana corrisponde a oggi, è ora di eseguire il comando o lo script.

Lavori e percorsi Cron

Quando un processo cron viene eseguito, lo fa in un ambiente limitato, il che significa che non eredita automaticamente le variabili o i percorsi di ambiente dell’utente o del sistema. Ciò può portare a problemi in cui il processo cron fallisce perché non riesce a trovare gli eseguibili o gli script necessari a causa di un percorso non definito o errato.

Alla luce di ciò, puoi impostare esplicitamente la variabile d'ambiente PATH all'interno del file crontab per gestire i percorsi nei processi cron. Questo dice al demone cron dove cercare gli eseguibili. Per esempio:

PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin

L'aggiunta di questa riga all'inizio del file crontab garantisce che tutti i processi cron riportati di seguito cercheranno gli eseguibili in queste directory.

Tuttavia, considerando le migliori pratiche, ti consigliamo di specificare sempre percorsi assoluti per tutti gli eseguibili e gli script nel tuo cron lavori per evitare ambiguità e potenziali errori.

Inoltre, prima di fare affidamento sull'esecuzione automatizzata, esegui manualmente i tuoi script o comandi utilizzando gli stessi percorsi e le stesse impostazioni di ambiente definite nel tuo crontab per assicurarti che funzionino come previsto.

Impostazione e gestione dei lavori Cron

Ok, mettiamo da parte la teoria ora. Sei dotato di tutte le conoscenze essenziali su come funzionano i lavori cron e i loro componenti. È ora di tuffarsi nella parte entusiasmante: creare un'attività di lavoro cron.

Crea il lavoro Cron dell'utente

Per creare o modificare il file crontab dell'utente, utilizza il seguente comando nel terminale:

crontab -e

È il modo standard con cui gli utenti possono creare e modificare lavori cron. Una volta eseguito, modifica i processi cron per l'utente che esegue il comando aprendo il file crontab dell'utente nell'editor di testo predefinito impostato per il tuo sistema, come Vi, Nano o un altro.

Se è la prima volta che usi il comando, ti potrebbe essere chiesto di selezionare un editor prima di procedere.

Successivamente, per aggiungere un processo cron, aggiungi semplicemente una nuova riga al file crontab seguendo la sintassi spiegata sopra. Ad esempio, pianificheremo uno script di backup, "backup.sh", situato nella directory home del nostro utente, da eseguire ogni giorno alle 3:00 aggiungendo la seguente riga:

0 3 * * * /home/linuxiac/backup.sh

Numerose righe precedute dal simbolo “#” e quindi commentate all'inizio del file servono come guide concise per l'impostazione di un processo cron. Digita il tuo dopo di loro, come mostrato nell'immagine sopra.

Successivamente, salva ed esci dall'editor. Ricorda, il servizio Cron controlla automaticamente le modifiche ai file crontab e le applica di conseguenza, quindi non è necessario riavviarlo dopo aver apportato le modifiche.

In chiusura, vale la pena notare che l'uso di crontab -e offre l'ulteriore vantaggio di controllare automaticamente la sintassi quando si salva e si esce dal file. Cron ti avviserà di eventuali errori rilevati, fornendo una preziosa protezione contro l'inserimento accidentale di processi cron non validi.

Crea un processo Cron a livello di sistema

Poiché crontab -e si concentra sui crontab dei singoli utenti, non è progettato per modifiche alla configurazione di Cron a livello di sistema che potrebbero essere necessarie per determinate attività amministrative.

In questo caso, la modifica diretta del file “/etc/crontab” ti offre funzionalità crontab a livello di sistema. A differenza dei crontab specifici dell'utente, questo file può includere attività a livello di sistema e supporta la specifica dell'utente per ciascuna attività, offrendo flessibilità per l'esecuzione di comandi con account utente diversi.

Ad esempio, creiamo un processo cron a livello di sistema che eliminerà tutti i file con l'estensione ".log" dalla directory "/var/log/myservice" alle 2 :00.

Per fare ciò, apriamo prima il file “/etc/crontab” con il nostro editor di terminale preferito:

sudo vim /etc/crontab

Quindi entriamo nel processo cron, che assomiglia a questo:

0  2  *  *  * root /usr/bin/find /var/log/myservice -type f -name '*.log' -delete

Ciò che lo distingue dai lavori cron dell'utente è l'inclusione di una colonna aggiuntiva dopo i campi iniziali di cinque volte. Questa colonna consente di specificare l'account utente con cui verrà eseguito il lavoro, in questo caso root.

Tuttavia, la modifica diretta del file “/etc/crontab” presenta due inconvenienti principali. Innanzitutto, questo approccio non prevede il controllo della sintassi, aumentando il rischio di errori.

Il secondo è perché “/etc/crontab” influisce sull'intero sistema; voci errate possono avere implicazioni diffuse, potenzialmente compromettendo la stabilità o la sicurezza del sistema. Quindi, usalo con cautela.

Elenco dei lavori Cron degli utenti

Per garantire che i processi cron siano stati pianificati correttamente, puoi visualizzare il contenuto del file crontab dell'utente utilizzando:

crontab -l

Questo comando elenca tutti i processi cron pianificati per il tuo utente, consentendoti di verificare o rivedere le attività impostate per l'esecuzione.

Elenco dei lavori Cron a livello di sistema

Come già sappiamo, i lavori cron a livello di sistema sono archiviati in posizioni diverse e non sono elencati nel crontab dell’utente. Per elencare i processi cron a livello di sistema, dovrai esaminare il file “/etc/crontab” e le directory “/etc/cron.d/”, “ /etc/cron.daily/”, “/etc/cron.hourly/”, “/etc/cron.weekly/”, e "/etc/cron.monthly/".

Puoi visualizzare questi file utilizzando il comando cat o qualsiasi editor di testo. Per esempio:

sudo cat /etc/crontab

Per elencare il contenuto delle directory, ad esempio "/etc/cron.daily", utilizzare:

ls /etc/cron.daily/

Elenco dei lavori Cron per altri utenti

Se disponi dei privilegi di superutente (root), puoi elencare i processi cron per qualsiasi utente sul sistema utilizzando il comando crontab con l'opzione "-u" seguita dal nome utente e da "- l” opzione. Ad esempio, per elencare i processi cron per un utente denominato "bobby", dovresti eseguire:

sudo crontab -u bobby -l

Questo comando è utile per gli amministratori di sistema che gestiscono processi cron su più account utente.

Modifica dei lavori Cron

Per modificare un processo cron, analogamente alla creazione, utilizzare il comando seguente per aprire il file crontab dell'utente corrente nell'editor predefinito:

crontab -e

Quando apri il file crontab, vai alla riga contenente il processo cron che desideri modificare e modifica la pianificazione o il comando secondo necessità, quindi salva ed esci dal file.

Se devi modificare il file crontab di un altro utente (supponendo che tu abbia le autorizzazioni necessarie), ad esempio, dell'utente "bobby", utilizza:

sudo crontab -u bobby -e

Eliminazione del lavoro Cron

A seconda del tuo obiettivo, hai diversi metodi per rimuovere un processo cron. Per eliminare solo un lavoro specifico, utilizza il comando crontab -e per aprire il file crontab.

Da lì, vai alla riga che rappresenta il lavoro che desideri eliminare. Rimuovi quella riga eliminandola completamente. Allo stesso tempo, fai attenzione a mantenere tutte le altre linee uguali. Successivamente, salva le modifiche ed esci dall'editor.

Tuttavia, se desideri eliminare tutti i processi cron pianificati per un utente, puoi rimuovere il file crontab dell'utente. Questa azione cancellerà tutte le attività pianificate, quindi dovrebbe essere eseguita con cautela.

Apri il terminale e inserisci il comando mostrato di seguito:

crontab -r

Ciò rimuoverà il file crontab dell'utente corrente senza una richiesta di conferma, quindi assicurati di voler procedere prima di eseguirlo.

Se preferisci ricevere una richiesta di conferma prima dell'eliminazione, utilizza il comando crontab -i seguito da -r. Questo richiederà conferma prima di rimuovere il file crontab.

Cheatsheet di Crontab

La tabella seguente delinea brevemente i punti chiave discussi sopra riguardanti le opzioni principali del comando crontab.

crontab -e

Modifica il file crontab o creane uno se non esiste già.

crontab -l

Se abbinata a opzioni aggiuntive, questa funzionalità consente di modificare o visualizzare il file crontab di un utente, una funzionalità riservata esclusivamente agli utenti con privilegi di amministratore.

crontab -r

Rimuovi l'intero file crontab.

crontab -u user

Se abbinata a opzioni aggiuntive, questa funzionalità consente la modifica o la visualizzazione del file crontab di un utente, una funzionalità riservata esclusivamente agli utenti con privilegi di amministratore.

Come risolvere i problemi relativi ai lavori Cron

Sfortunatamente, quando un processo cron non viene eseguito, può essere frustrante e potenzialmente problematico, a seconda dell'attività. Ecco quindi alcune linee guida di base per indagare sulla causa di ciò.

Il primo passo nella risoluzione dei problemi è garantire che il processo cron sia definito correttamente. Verifica che ciascun campo sia specificato correttamente in base alle tue esigenze. Un errore comune è la sintassi errata o l'incomprensione del modo in cui cron interpreta i caratteri e gli intervalli speciali.

Quindi assicurati che il demone Cron sia in esecuzione sul tuo sistema. Puoi verificarlo eseguendo un comando come:

sudo systemctl status cron

Assicurati che lo script o il comando che il tuo processo cron tenta di eseguire disponga delle autorizzazioni appropriate e di utilizzare percorsi assoluti. I processi Cron vengono eseguiti in un ambiente limitato con una definizione di PATH minima, quindi è fondamentale specificare il percorso completo di qualsiasi comando o script.

Inoltre, il file deve essere eseguibile e accessibile all'utente con cui è pianificato il processo cron. Prova a eseguire il comando o lo script manualmente dalla riga di comando utilizzando lo stesso account utente utilizzato dal processo cron.

Questo può aiutarti a verificare che il comando funzioni come previsto senza l'ambiente cron. Se il comando fallisce, saprai che il problema risiede nel comando o nello script anziché in cron.

Ricorda che i processi cron vengono eseguiti in un ambiente shell non interattivo e senza accesso, il che significa che potrebbero non avere accesso alle stesse variabili di ambiente di quando esegui i comandi manualmente.

Se il tuo script si basa su variabili di ambiente, potrebbe essere necessario impostarle esplicitamente all'inizio dello script o all'interno della definizione del processo cron.

Esempi di lavori Cron

Infine, presenteremo diversi esempi di lavori cron che coprono quasi tutte le potenziali situazioni di sintassi Cron. Considerali come una base per crearne uno tuo.

* * * * *

Esegui il processo cron ogni minuto.

0 * * * *

Esegui il lavoro cron ogni ora.

0 0 * * *

Esegui il lavoro cron ogni giorno a mezzanotte.

0 2 * * *

Esegui il processo cron ogni giorno alle 2 del mattino.

0 0 15 * *

Esegui il processo cron ogni 15 del mese a mezzanotte.

0 0 * * 6

Esegui il lavoro cron ogni sabato a mezzanotte.

0 15 * * 1-5

Esegui il processo cron tutti i giorni alle 15:00 dal lunedì al venerdì.

*/5 * * * *

Esegui il processo cron ogni 5 minuti.

0 8-16 * * *

Esegui il lavoro cron ogni giorno, ogni ora, in punto, dalle 8:00 alle 16:00.

0 4 * * 2,4

Esegui il processo cron alle 4:00 di martedì e giovedì.

@reboot

Esegui il processo cron all'avvio del sistema.

Inoltre, strumenti online come this, this o this offrono robuste interfacce basate sul web per l'impostazione delle attività cron.

Migliori pratiche e suggerimenti

  • Testa manualmente i tuoi script prima di programmarli con Cron per assicurarti che funzionino come previsto.
  • Utilizza percorsi assoluti per comandi e script all'interno del file crontab per evitare problemi di percorso.
  • Reindirizza l'output a un file o a un messaggio di posta elettronica per acquisire eventuali output o errori per la risoluzione dei problemi ("comando > /percorso/del/logfile 2>&1"). In questo modo, puoi rivedere il file di registro per eventuali problemi.
  • Fai attenzione al carico del sistema quando pianifichi i lavori, soprattutto se richiedono un uso intensivo di risorse o se hai molti lavori pianificati nello stesso periodo.

Conclusione

I lavori Cron sono essenziali per l'amministrazione del sistema Linux. Offrono uno strumento robusto e versatile per la pianificazione e l'automazione delle attività.

La sua bellezza sta nella sua versatilità e precisione. Dai semplici comandi eseguiti a intervalli di un minuto agli script complessi pianificati per date e orari specifici, cron si adatta a molti requisiti.

Con file crontab a livello di utente e di sistema accanto a directory designate per attività periodiche, i lavori cron offrono flessibilità ai singoli utenti e agli amministratori di sistema per personalizzare la pianificazione delle attività in base alle loro esigenze specifiche.

Sfruttando gli approfondimenti e gli esempi contenuti in questo articolo, sei sulla buona strada per raggiungere il successo nella pianificazione, migliorare la produttività e sbloccare nuove possibilità nel tuo viaggio verso Linux.

Per ulteriori dettagli, le pagine man di cron e crontab contengono informazioni approfondite e spiegazioni su come funziona il sistema cron.

Grazie per il tuo tempo! Il tuo feedback e i tuoi commenti sono, come sempre, i benvenuti.

Articoli correlati: