GNU/Linux >> Linux Esercitazione >  >> Linux

Spiegazione di Cron Jobs e Crontab su Linux

Questo tutorial è una guida completa sulla comprensione di cron su Linux e sul ruolo del file crontab.

In qualità di amministratore di sistema, è molto probabile che passi molto tempo a svolgere attività ricorrenti sul tuo sistema .

Fortunatamente per te, c'è un modo per automatizzare le attività sui sistemi Linux:cron jobs .

Creato inizialmente nel 1975 dagli AT&T Bell Laboratories, cron si è evoluto fino a diventare un riferimento su Linux quando si tratta di pianificare ed eseguire attività a date o periodi fissi.

Nel tutorial di oggi daremo un'occhiata al demone cron , cron jobs e il comando crontab su Linux.

Indicheremo anche la differenza tra i lavori cron definiti dall'utente e i lavori cron definiti dal sistema.

Pronto?

Cosa sono Cron e Cron Job?

Cron è un demone di sistema eseguito su qualsiasi sistema Linux responsabile del rilevamento dei processi cron e dell'esecuzione a intervalli prestabiliti.

Cron viene eseguito ogni minuto e ispezionerà una serie di directory predefinite sul filesystem per vedere se è necessario eseguire lavori.

D'altra parte, i lavori cron sono attività definite per essere eseguite a determinati intervalli o periodi, di solito script di shell o semplici comandi bash.

I processi Cron vengono solitamente utilizzati per registrare determinati eventi nelle utilità Syslog o per pianificare operazioni di backup sul tuo host (come backup di database o backup di filesystem).

Per un sistema operativo Linux che esegue systemd come gestore dei servizi, puoi ispezionare il servizio cron eseguendo il comando seguente

$ sudo systemctl status cron.service

Nota :hai bisogno dei privilegi sudo per ispezionare i servizi di sistema con systemd

Cos'è la sintassi di Cron Job?

La cosa più importante da sapere su cron è probabilmente la sintassi del lavoro cron.

Per definire un cron job, devi definire :

  • Periodo :significa quando il tuo lavoro verrà eseguito nel tempo. Puoi definirlo per l'esecuzione ogni primo giorno del mese, ogni 5 minuti o in un giorno molto specifico dell'anno. Gli esempi verranno forniti più avanti nell'articolo;
  • Comando :letteralmente il comando che deve essere eseguito dall'utilità cron, può essere un comando di backup o qualsiasi comando che normalmente eseguiresti in una shell;
  • Utente :questo è riservato ai lavori cron definiti dal sistema in cui si desidera specificare l'utente che deve eseguire il comando cron. Per i lavori cron definiti dall'utente, non è necessario specificare un utente e il sistema li eseguirà come root per impostazione predefinita.

Come probabilmente avrai notato, la colonna della periodicità è composta da 5 colonne.

Ogni singola colonna può essere impostata su * , il che significa che il comando verrà eseguito per ogni singolo valore dell'intervallo specificato, o per un valore particolare, ad esempio il 6° mese dell'anno.

Se vuoi eseguire un comando per ogni minuto, ogni ora, ogni giorno del mese, ogni mese , avresti diritto al seguente comando

* * * * *  logger "This is a command executed every minute"

Se desideri eseguire un comando ogni 30 minuti , dovresti scrivere

*/30 * * * * logger "This is executed every 30 minutes"

Se invece vuoi eseguire un comando il primo giorno del mese a mezzanotte , dovresti scrivere

0 0 1 * * logger "This is executed on the first day of the month, at midnight"

Durante la definizione di quei lavori cron, non dovevo specificare l'utente che li eseguiva.

Questo perché c'è una differenza tra i lavori cron definiti dall'utente e i lavori cron definiti dal sistema.

Lavori Cron definiti dall'utente

I lavori cron definiti dall'utente sono lavori cron definiti da un determinato utente sull'host. Ciò non significa che non sia in grado di eseguire comandi che interessano l'intero sistema, ma i suoi compiti sono isolati su determinate cartelle sull'host.

Ogni utente può avere il proprio set di lavori cron su un host Linux.

Elenco dei lavori cron definiti dall'utente

Quando sei connesso a un utente specifico, esegui questo comando per vedere i lavori cron di proprietà dell'utente

$ crontab -l

Se possiedi lavori cron, verranno immediatamente visualizzati nell'output standard.

Per impostazione predefinita, i lavori cron definiti dall'utente sono archiviati nella directory /var/spool/cron/crontabs ma dovrai essere root per esplorarli.

Aggiunta di lavori cron definiti dall'utente

Per modificare i lavori cron relativi all'utente a cui sei connesso, esegui il seguente comando

$ crontab -e

Per impostazione predefinita, il tuo host aprirà il tuo editor predefinito e sarai in grado di abilitare i tuoi lavori cron sul sistema.

Aggiungi una nuova riga alla fine del file con la riga seguente, ad esempio

* * * * * logger "This is a log command from devconnected"

Logger è un comando che consente agli utenti di scrivere messaggi personalizzati nei registri. Se hai bisogno di una guida completa su logging e Syslog, abbiamo un resoconto completo su di esso.

Non è necessario specificare un utente poiché il sistema è già a conoscenza dell'utente che definisce questo comando.

Inoltre, il comando verrà eseguito come utente corrente per impostazione predefinita.

Non devi riavviare nessun servizio, il tuo lavoro verrà preso in considerazione alla prossima occorrenza.

Dato l'esempio che abbiamo specificato in precedenza, ispeziona i tuoi log per vedere il tuo lavoro cron eseguito

$ sudo journalctl -xfn

Come puoi vedere, il servizio cron ha ispezionato le directory specifiche dell'utente sull'host (in /var/spool/cron/crontabs ), ha aperto una sessione come utente corrente, ha eseguito il comando e ha chiuso la sessione.

Eccezionale!

Hai imparato come definire i lavori cron definiti dall'utente sul tuo host.

Rimozione dei lavori cron definiti dall'utente

Per rimuovere i lavori cron definiti dall'utente, utilizzare il comando seguente

$ crontab -r
(or)
$ crontab -ri

Crontab verrà eliminato per l'utente corrente (non eliminerà i processi cron definiti dal sistema).

Esegui un elenco di lavori cron per verificare che tutti i lavori cron siano stati eliminati

Lavori cron definiti dal sistema

I lavori cron definiti dal sistema sono lavori definiti nelle directory condivise sul filesystem.

Significa che, dato che hai i privilegi sudo sull'host, sarai in grado di definire lavori cron che potrebbero essere modificati da altri amministratori sul tuo sistema.

Le directory relative ai lavori cron definiti dal sistema si trovano nella directory etc e possono essere visualizzate eseguendo

$ ls -l | grep cron

Come puoi vedere, questa cartella contiene molte cartelle e file diversi:

  • anacrontab :un file utilizzato dal servizio anacron su Linux, che verrà spiegato in una delle prossime sezioni.
  • cron.d :una directory contenente un elenco di lavori cron che devono essere letti dal servizio cron. I file in cron.d sono scritti data la sintassi cron che abbiamo visto prima;
  • cron.giornaliero :una directory contenente un elenco di script che devono essere eseguiti dal sistema ogni giorno. I file sono diversi dai file contenuti nella directory cron.d perché sono veri e propri script bash e non lavori cron scritti con la sintassi cron;
  • cron.hourly, cron.monthly, cron.weekly sono autoesplicativi, contengono script eseguiti ogni ora, ogni mese e ogni settimana dell'anno;
  • cronaca :un file cron scritto con la sintassi cron che indica al servizio cron di eseguire i lavori che si trovano nelle cartelle giornaliere, orarie, mensili e settimanali. Può anche definire lavori personalizzati in modo simile ai lavori cron definiti dall'utente, tranne per il fatto che devi specificare l'utente che deve eseguire il comando.

Elenco dei lavori cron definiti dal sistema

Come probabilmente avrai capito, i lavori cron definiti nelle cartelle di configurazione globale sono distribuiti su più cartelle.

Inoltre, su tali cartelle possono essere definiti più file cron.

Tuttavia, utilizzando la riga di comando, esiste un modo efficiente per concatenare tutti i file in una determinata directory.

Per elencare tutti i lavori cron definiti in cron.d, eseguire il comando seguente

$ cat /etc/cron.d/*

Allo stesso modo, per elencare i lavori cron definiti nel file crontab, esegui il comando seguente

$ cat /etc/crontab

Allo stesso modo, puoi ispezionare tutti gli script che verranno eseguiti quotidianamente

ls -l /etc/cron.daily/

Aggiunta di lavori cron definiti dal sistema

Come probabilmente avrai capito, ci sono diversi modi per aggiungere lavori cron definiti dal sistema.

Puoi creare un file cron in cron.d e il file verrà ispezionato ogni minuto per le modifiche.

Puoi anche aggiungere il tuo lavoro cron direttamente al file crontab. Se desideri eseguire un'attività ogni minuto o ogni ora, ti consigliamo di aggiungere il tuo script direttamente alle directory cron corrispondenti.

L'unica differenza con i lavori cron definiti dall'utente è che dovrai specificare un utente che eseguirà il comando cron.

Ad esempio, crea un nuovo file nella directory cron.d e aggiungi il seguente contenuto (avrai ovviamente bisogno dei privilegi sudo per l'esecuzione dei comandi)

$ sudo nano /etc/cron.d/custom-cron

*/1 * * * *    root    logger 'This is a cron from cron.d'

Ancora una volta, non è necessario riavviare alcun servizio, il servizio cron ispezionerà il tuo file all'iterazione successiva.

Per vedere il tuo lavoro cron in azione, esegui il seguente comando

$ sudo journalctl -xfn 100 | grep logger

Questo è ciò che dovresti vedere sul tuo schermo

Fantastico!

Come puoi vedere, il tuo lavoro viene ora eseguito ogni minuto dall'utente root sul tuo host.

Ora che hai un'idea completa di quali sono i lavori cron definiti dall'utente e i lavori cron definiti dal sistema, vediamo il ciclo di vita completo di cron su un host Linux.

Cron Complete Cycle su Linux

Senza ulteriori indugi, ecco un ciclo completo di cron su Linux.

Questo è ciò che fa il tuo servizio cron ogni minuto, così come tutte le directory ispezionate.

Cron ispezionerà i lavori cron definiti dall'utente ed eseguirli se necessario.

Esaminerà anche il crontab file in cui diversi processi cron predefiniti sono definiti per impostazione predefinita.

Quei processi cron predefiniti sono script che istruiscono il tuo host a verificare ogni minuto, ogni ora, ogni giorno e ogni settimana cartelle specifiche e di eseguire gli script che si trovano al loro interno.

Infine, viene ispezionata la directory cron.d . Il cron.d può contenere file cron personalizzati e contiene anche un file molto importante che è il file anacron cron.

File cron Anacron su Linux

Il file cron anacron è un file eseguito ogni mezz'ora tra le 7:00 e le 23:00.

Il file anacron cron è responsabile della chiamata al servizio anacron .

Il servizio anacron è un servizio responsabile dell'esecuzione dei lavori cron nel caso in cui il tuo computer non fosse in grado di eseguirli in primo luogo.

Supponiamo che il tuo computer sia spento ma hai un cron job responsabile dell'esecuzione di script di aggiornamento ogni settimana.

Di conseguenza, all'accensione del computer, invece di attendere un'intera settimana per eseguire quegli script di aggiornamento, il servizio anacron rileverà che non eri in grado di avviare l'aggiornamento cron prima.

Anacron procederà quindi all'esecuzione del lavoro cron per l'aggiornamento del sistema.

Per impostazione predefinita, al file cron di anacron viene richiesto di verificare che le directory cron.daily, cron.weekly, cron.hourly e cron.monthly siano state richiamate correttamente in passato.

Se anacron rileva che i lavori cron nella cartella cron.monthly non sono stati eseguiti, sarà incaricato di eseguirli.

Conclusione

Oggi hai imparato come funzionano cron e crontab su Linux.

Hai anche avuto un'introduzione completa sulla sintassi di cron e su come definire i tuoi script cron come utente sul tuo host.

Infine, hai avuto una panoramica completa del ciclo cron di come funzionano le cose sul tuo host e di cos'è anacron.

Se sei interessato all'amministrazione del sistema Linux, abbiamo una sezione completa a riguardo sul nostro sito web. Fai clic sull'immagine qui sotto per verificarla.


Linux
  1. Come usare cron su Linux

  2. Come automatizzare le attività in Linux usando Crontab

  3. Comandi Linux:job, bg e fg

  4. Come pianificare i lavori Cron con Crontab

  5. Linux:esegui cron job in primo piano

Capire Crontab in Linux con esempi

Comando Linux crontab per creare e gestire i lavori Cron

Come eseguire ed elencare i lavori Cron per un sistema Linux tramite PHP

Linux Crontab:15 fantastici esempi di Cron Job

Come pianificare i lavori con Cron in Linux

10 utili esempi di cron per pianificare i lavori in Linux