GNU/Linux >> Linux Esercitazione >  >> Linux

Capire Crontab in Linux con esempi

Il crontab viene utilizzato per automatizzare tutti i tipi di attività sui sistemi Linux. Questa è un'abilità particolarmente importante da apprendere per gli aspiranti amministratori di sistema. Può essere un po' difficile iniziare se sei un principiante. La sintassi è diversa dalla maggior parte degli altri comandi. Per questo motivo, questa lezione includerà alcune informazioni di base in più prima di mostrarti alcuni degli usi.

Non lasciarti intimidire da crontab

Per me, Crontab è stato uno dei concetti Linux più intimidatori come principiante. Al momento in cui mi è stato presentato "crontab", utilizzavo la riga di comando solo da pochi giorni e non capivo a malapena come utilizzare i comandi di navigazione dei file di base come "ls" e "cd".

Il motivo per cui sollevo la mia storia personale di apprendimento è che mi aspetto che molti nuovi utenti Linux potrebbero sentirsi sopraffatti allo stesso modo quando guardano la sintassi unica di "crontab". Posso rassicurarti però, non è così complicato una volta capito come funziona.

Cosa imparerai in questa guida

Voglio dare una rapida introduzione ad alcuni dei concetti coinvolti con crontab per renderlo più facile da capire. Il mio obiettivo è contestualizzare questi concetti e illustrare come si relazionano tra loro.

  • Breve introduzione ai concetti di Cron
  • Imposta l'accesso a Crontab per il tuo account utente
  • Gestisci gli errori con i tuoi cronjob
  • Creazione di cronjob

Introduzione rapida ai concetti chiave di cron

Per prima cosa ti presento alcuni concetti di base su "cron".

Differenza tra Cron, Crontab e Cron Job

Vedere le cose visivamente aiuta a comprendere nuovi argomenti più rapidamente. Ecco una ripartizione di come questi tre argomenti generalmente interagiscono. Descriverò quindi ciascuno con più dettagli.

Elemento Nome Linux Significato
Daemon 'crond' Pronunciato "demon" o "day-mon". Questi sono processi di sistema in background Linux.
Tabella 'crontab' Scrivi righe in questa tabella quando inserisci un comando crontab. Ogni asterisco "*" rappresenta un segmento di tempo e una colonna corrispondente in ogni riga.
Lavoro Cron Job L'attività specifica da eseguire descritta in una riga, abbinata al relativo ID orario designato

La tavola di Cron

Crontab sta per Cron Table. Questo è un file di sistema Linux che crea una struttura simile a una tabella in cui i campi sono separati da spazi bianchi. Gli utenti possono popolare la tabella assegnando valori a ciascun campo (asterisco).

In tutto l'articolo, potrei usare un linguaggio diverso per descrivere questa idea. Per cancellare un campo, una cella, una colonna, ecc. si riferiscono tutti alla stessa cosa. Se può essere d'aiuto, puoi pensare al tuo crontab come a un mini-database.

Il lavoro Cron

Se non hai familiarità con i database, puoi immaginare le celle in un file Excel vuoto. Ad ogni modo, per questa analogia ogni asterisco rappresenta una colonna il cui significato è definito dalla sua intestazione. La colonna finale sarà una chiamata per un comando o uno script. Ogni riga completa può essere considerata come un lavoro individuale. Questi sono spesso indicati come "lavori cron" sebbene job, task, ecc. siano tutti termini intercambiabili.

Il demone Cron

Abbiamo già discusso del tavolo e di come riempirlo di posti di lavoro. Ma come vengono eseguiti questi lavori? Un processo di sistema chiamato Daemon viene eseguito sullo sfondo della nostra macchina Linux.

Esistono demoni per molti servizi diversi. Questi sono comunemente denominati con il suffisso "d" al nome di un servizio.

Naturalmente, il demone cron si chiama 'crond'. Non è richiesta alcuna azione da parte nostra per eseguire quel demone, ma se ritieni che il comando non funzioni correttamente, puoi utilizzare il comando ps per verificare che 'crond' sia in esecuzione.

ps aux | grep crond

Questo comando cercherà i processi correnti per tutti gli utenti e restituirà eventuali istanze di "crond".

[email protected]:~$ ps ux | grep crond
christo+  8942  0.0  0.0  18612   840 pts/0    S+   02:16   0:00 grep --color=auto crond

Vedo che il demone è in esecuzione per il mio account utente. Lo sapevo già perché ho popolato un file tutto il giorno con l'output.

Capire la sintassi di Crontab

Ora che hai una vaga comprensione di come funziona cron, diamo un'occhiata alla sintassi dell'uso di crontab. Spero che sia meno confuso se riesci a immaginare queste informazioni come una tabella nella tua mente.

crontab [options]

* * * * *  <command> 
OR 
* * * * * <path/to/script>

Ti prometto che questo ti farà da quando avremo il nostro esempio attivo e funzionante. Esaminiamo di nuovo la sintassi per i lavori cron.

Come puoi vedere, la sintassi crontab ha 5 asterischi. Ecco cosa rappresentano ciascuno di questi asterischi:

4th 5th
* * * * *
ID Minuto Ora Giorno-Data Mese Nome del giorno
Valori 0-59 0 -23 1-31 1-12 0-6

NOTA:i nomi dei giorni 0-6 iniziano con domenica.

Per pianificare un'attività, sostituisci l'asterisco appropriato con il valore desiderato.

Facciamo un po' di pratica veloce. Se hai crontab come quello qui sotto, quando pensi che verrà eseguito il lavoro?

0 0 * * 0 

D:Quando verrà eseguito il comando se imposti il ​​lavoro in questo modo?

R. Ogni ora dal lunedì al sabato
B. Ogni minuto la domenica
C. Solo a mezzanotte dal lunedì al sabato
D. Solo a mezzanotte la domenica

La risposta qui è D. Esegui "comando" alle 00:00 [mezzanotte] ogni domenica.

Configura crontab cccess per il tuo account utente

Crontab è specifico dell'utente. L'hai già toccato un po'. Se ritieni che sia possibile che tu abbia già utilizzato crontab in precedenza, puoi verificarlo utilizzando crontab -l .

[email protected]:~$ crontab -l
no crontab for christopher

[email protected]:~$ crontab -e
no crontab for christopher - using an empty one

Select an editor.  To change later, run 'select-editor'.
  1. /bin/nano        <---- easiest
  2. /usr/bin/code
  3. /bin/ed

Choose 1-3 [1]: 1

Quando eseguo questo comando, puoi vedere che non ho crontab su questo sistema.

Dato che non ho ancora creato un crontab, quando utilizzo -e per modificare la tabella, mi viene richiesto il mio editor di testo preferito. Nano è suggerito come il programma più semplice da usare. Puoi usare qualsiasi editor di testo a riga di comando come Vim o Emacs. Dipende davvero da te.

Se all'inizio non ci riesci, sudo

Se provi crontab -e comando ma non ottieni questo risultato, potresti non avere i privilegi utente per creare la tabella. Se hai accesso a sudo, puoi usare sudo per impostare crontab.

sudo crontab -e <your_username>

Il tuo sistema caricherà automaticamente il tuo crontab nella destinazione corretta che può variare in base alla distribuzione ma spesso si trova in una directory come /var/spool/cron/crontabs . Non tentare di modificare i file qui.

Cosa succede se il lavoro cron rileva un errore?

Il comportamento predefinito è inviare tramite e-mail l'output. Questa funzione è progettata per gli amministratori che possono inviare automaticamente i log a un'e-mail "locale" sul dominio di rete.

Puoi configurarlo tu stesso se hai un server di posta. Esistono anche modi per automatizzare l'output di posta elettronica su Gmail o servizi simili. Tuttavia, questi metodi esulano dallo scopo di questo articolo.

Invece, esamineremo due modi comuni per aggirare l'errore.

1) Invia output a un file

È possibile designare un file a cui inviare questo tipo di output e quindi utilizzare >> per reindirizzare l'output.

Usando >> aggiungerà informazioni a un file esistente, mentre un singolo > il simbolo sovrascriverà il file. Questo è importante da sapere se si desidera mantenere un file di registro di grandi dimensioni che aggiorna i record frequentemente. Entrambi creeranno automaticamente il file se non esiste.

Esempio di Cron Job:

0 * * * *  echo "Linux is Cool!" >> ~/crontab_log.txt

2) Usa /dev/null

Ciò aggirerà l'opzione e-mail eliminando in sostanza i dati. L'errore standard ('2') e l'output standard ('1') vengono entrambi inviati al file null.

0 0 * * * echo "Why are you silencing me every night at midnight?" > /dev/null 2>&1

Potresti aver notato che sto usando i comandi echo per gli esempi. Non c'è una ragione particolare per questo, ma rende facile verificare le modifiche e "controllare il tuo lavoro".

Se hai fatto un po' di programmazione, potresti aver usato i comandi di stampa per testare la tua logica. Questo è lo stesso concetto.

Proviamo a impostare il nostro lavoro cron. Se hai già "giocato insieme", è fantastico. In caso contrario, ora è il momento di preparare quel terminale e divertirti.

Esempi di Crontab:comandi e script di pianificazione

Ti ho mostrato un paio di esempi mentre spiegavo come viene instradato l'output. Avevano senso per te?

Fammi vedere il primo esempio.

mese
Minuto Ora Giorno-Data Nome del giorno Comando
0 * * * * echo "Linux è fantastico!">> ~/crontab_log.txt

L'impostazione del valore dei minuti su "0" significa che il comando verrà eseguito ogni ora, all'ora.

Programmi di lavoro avanzati

È possibile modificare più valori contemporaneamente. Se lo desideri, puoi sostituire tutti e 5 gli asterischi con le specifiche.

mese
Minuto Ora Giorno-Data Nome del giorno Comando
*/5 3-6 */5 */2 0,6 echo "Linux è fantastico!">> ~/crontab_log.txt

Qualche idea su cosa dice questo? Per il bene di questo tutorial, ho reso questo lavoro particolarmente confuso. Sarebbe insolito avere qualcosa con così tanti parametri “in the wild”, ma vediamo se riesci a decifrarlo. Per qualcosa del genere, mi piace lavorare a ritroso attraverso i campi.

Proviamolo insieme:

Campo Valore Significato
Nome del giorno 0,6 Sabato e domenica
Mese */2 Ogni mese divisibile per 2 (pari) mesi.
Data del giorno * Ogni data
Ora 3-6 Tra le 3 e le 6 del mattino
Minuti */5 Ogni 5 minuti

In linguaggio semplice:

Quindi ogni due mesi, nei fine settimana, indipendentemente dalla data, questo comando verrà eseguito ogni 5 minuti tra le 3:00 e le 6:00.

Wow, era contorto. Se sei stato in grado di seguirlo, sei pronto a eseguire il cron job con i migliori.

Scrivi un semplice script di automazione cron per il backup dei file

Fino a questo punto, i lavori cron che hai scritto hanno fatto solo una cosa. Può essere utile, ma forse vuoi svolgere più attività.

Fortunatamente questo non è solo possibile, ma anche molto facile. Se ricordi l'esempio di sintassi originale, puoi anche utilizzare un percorso per uno script.

Anche questo non si limita a bash, puoi anche implementare uno script che utilizza Python o Perl se lo desideri.

Quali sono i nostri obiettivi?

  • I lavori verranno elaborati ogni notte alle 3 del mattino
  • Esegui il backup della cartella /Documenti in un file zip
  • Genera un file di testo con un elenco di tutto nella directory
  • Crea una cartella di archivio che cloni il nostro backup e il file di testo in una sottocartella con la data corrente

our_backup_script.sh

#! /bin/bash

DATE=$(date +%d-%m-%Y)
# Date in format DAY##-MONTH##-YEAR####

mkdir -p ~/archive/$DATE
# create a folder for today's date in the archive, if archive doesn't exist, make archive 
ls -al ~/Documents > ~/archive/$DATE/contents.txt
# create a text file listing the contents of the documents folder
cd ~/  && tar -cpzf $DATE.docs.backup.gz Documents/*
# change to parent directory to tar /Documents folder
cp ~/$DATE.docs.backup.gz ~/archive/$DATE/documents_archive.gz
# one .gz file is left in the home directory, a clone is sent to our archive under it's date
[email protected]:~$ ls
 Desktop     Downloads   Music                  Pictures   Public      Videos
 Documents   ENV         our_backup_script.sh   projects   Templates  'VirtualBox VMs'
[email protected]:~$ bash our_backup_script.sh 
[email protected]:~$ ls
 25-11-2019.docs.backup.gz   Documents   Music                  projects    Videos
 archive                     Downloads   our_backup_script.sh   Public     'VirtualBox VMs'
 Desktop                     ENV         Pictures               Templates
[email protected]:~$ ls archive/25-11-2019/
contents.all_files.txt  documents_archive.gz

Tutto ciò che resta da fare per rendere questo script un lavoro cron.

crontab -e

E aggiungi quanto segue:

0 3 * * * bash ~/our_backup_script.sh

Il tuo ha avuto successo? Il mio lo era. In effetti, l'idea mi è piaciuta così tanto che potrei tenerla come backup quotidiano. Una modifica che apporterò è spostare il mio archivio in una cartella sul mio computer che si sincronizza con l'archiviazione cloud.

Un altro modo per pianificare i lavori in Linux è usare a comando. Potresti essere interessato a saperne di più.

Hai qualche idea per uno script che potresti voler creare? Questo articolo ti ha aiutato a capire meglio crontab? Condividi con noi nei commenti.


Linux
  1. Comando wc Linux con esempi

  2. Comando Tee Linux con esempi

  3. Comando testa di Linux con esempi

  4. Comando JQ in Linux con esempi

  5. 6 Esempi di comandi Linux Crontab

Comando Tr in Linux con esempi

15 Comando Linux ps con esempi

Comando CD Linux con esempi

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