Come usare Cron su Linux Unix

Cos'è cron?


Cron è il nome del programma che consente agli utenti Linux/Unix di eseguire automaticamente comandi o script (gruppi di comandi) in un'ora o una data specifica. Viene normalmente utilizzato per i comandi delle attività amministrative, come i backup, ma può essere utilizzato per eseguire qualsiasi cosa. Come definito nelle pagine man di cron; è un demone che esegue programmi schedulati.
In praticamente tutte le distribuzioni Linux viene utilizzata la versione Vixie Cron, dalla persona che l'ha sviluppata, che è Paul Vixie, uno dei grandi guru di Unix, creatore anche, tra gli altri sistemi, di BIND che è uno dei server DNS più popolari nel mondo.

Inizio cron


Cron è un demone (servizio), il che significa che deve essere avviato solo una volta, di solito con lo stesso avvio del sistema. Il servizio cron si chiama crond. Nella maggior parte delle distribuzioni il servizio viene installato automaticamente e viene avviato dall'avvio del sistema, può essere verificato in diversi modi:
 1) etc / rc.d / init.d / crond status 2) /etc/init.d/crond status crond (pid 507) è in esecuzione… 
Se hai installato il comando di servizio:
 stato del crond del servizio
 crond (pid 507) è in esecuzione… 
può anche essere rivisto tramite il comando ps:
 ps -ef | grep crond
se per qualche motivo, cron non funziona, possiamo avviarlo con:
 /etc/rc.d/init.d/crond start Inizio crond: [OK]
[color = rgb (0,0,0)] Se il servizio non fosse configurato per partire dall'inizio, sarebbe sufficiente aggiungerlo con il comando chkconfig: [/ color]
 chkconfig --level 35 crond on 
Con questo lo aggiungeresti ai livelli di esecuzione 3 e 5, in modo che inizi all'avvio del sistema.

Usando cron


Esistono almeno due modi diversi per utilizzare cron:
Il primo è nella directory / etc, dove molto probabilmente troverai le seguenti directory:
  • cron.orario
  • cron.giornaliero
  • cron.settimanale
  • cron.mensile
Se un file di script viene inserito in una di queste directory, lo script verrà eseguito ogni ora, ogni giorno, ogni settimana o ogni mese, a seconda della directory.
Affinché lo script venga eseguito, deve essere qualcosa di simile al seguente:
 #!/bin/sh #script che genera un backup cd/usr/documents tar czf * backup cp backup/other_directory/
Dobbiamo sistemare che la prima riga inizia con #!, che indica che si tratta di uno script di shell bash, le altre righe sono i comandi che vogliamo che lo script esegua. Questo script potrebbe essere chiamato ad esempio backup.sh e dobbiamo anche cambiare i permessi corrispondenti in modo che possa essere eseguito, ad esempio:
 chmod 700 backup.sh ls -l backup.sh -rwx ------ 1 root root 0 Jul 20 09:30 backup.sh
La "x" nel gruppo di autorizzazioni del proprietario (-rwx) indica che può essere eseguito.
Se lasciamo questo script in cron.hourly, allora verrà eseguito ogni ora con un minuto di ogni giorno, in seguito spiegherò perché.
Il secondo modo per eseguire o utilizzare cron è manipolare direttamente il file /etc/crontab. Nell'installazione predefinita di varie distribuzioni Linux, questo file avrà un aspetto simile al seguente:
 cat / etc / crontab SHELL = / bin / bash PATH = / sbin: / bin: / usr / sbin: / usr / bin MAILTO = root HOME = / # run-parts 01 * * * * root run-parts / etc / cron.hourly 02 4 * * * root run-parts /etc/cron.daily 22 4 * * 0 root run-parts /etc/cron.weekly 42 4 1 * * root run-parts /etc/cron.monthly
Le prime quattro righe sono variabili che indicano quanto segue:
CONCHIGLIAÈ il "guscio" sotto il quale scorre il cron. Se non specificato, verrà preso di default quello indicato nella riga /etc/passwd corrispondente all'utente che sta eseguendo cron.
IL PERCORSOContiene o indica il percorso delle directory in cui cron cercherà il comando da eseguire. Questo percorso è diverso dal percorso globale del sistema o dell'utente.
MAIL TOÈ a chi viene inviato l'output del comando (se ha un output). Cron invierà una mail a chi è specificato in questa variabile, cioè deve essere un utente valido del sistema o di qualche altro sistema. Se non specificato, cron invierà la posta all'utente che possiede il comando in esecuzione.
CASAÈ la root o la directory principale del comando cron, se non indicata allora la root sarà quella indicata nel file /etc/passwd corrispondente all'utente che esegue cron.
Il i commenti sono indicati con # all'inizio della riga.
Dopo quanto sopra vengono le linee che eseguono le attività correttamente pianificate. Non ci sono limiti al numero di attività che possono esserci, una per riga. Campi (sono 7) che formano queste linee sono così formati:
 Minuti Ora Giorno del mese Mese Giorno della settimana Comando utente
  • Campo: Descrizione
  • Minuto: Controlla il minuto dell'ora in cui verrà eseguito il comando, questo valore deve essere compreso tra 0 e 59.
  • Volta: Controlla l'ora in cui verrà eseguito il comando, è specificato in un formato 24 ore, i valori devono essere compresi tra 0 e 23, 0 è mezzanotte.
  • Giorno del mese: Giorno del mese in cui si desidera eseguire il comando. Ad esempio, verrebbe indicato 20, per eseguire il comando il 20 del mese.
  • Mese: Mese in cui verrà eseguito il comando, può essere indicato numericamente (1-12), oppure con il nome del mese in inglese, solo le prime tre lettere.
  • Giorno della settimana: Giorno della settimana in cui verrà eseguito il comando, può essere numerico (0-7) o con il nome del giorno in inglese, solo le prime tre lettere. (0 e 7 = domenica)
  • Utente: Utente che esegue il comando.
  • Comando: Comando, script o programma che vuoi eseguire. Questo campo può contenere più parole e spazi.
Un asterisco * come valore nei primi cinque campi, indicherà l'inizio-fine del campo, cioè tutto. Un * nel campo dei minuti indicherà tutti i minuti.
Per capire meglio questo dei primi 5 campi e l'asterisco userò meglio diversi esempi:
Esempio:
 Descrizione 01 * * * * Viene eseguito a 1 minuto di ogni ora di ogni giorno 158 * * * Alle 8:15 tutti i giorni 15 20 * * * Alle 20:15 di ogni giorno 00 5 * * 0 Alle 5 del mattino ogni domenica * 5 * * dom Ogni minuto dalle 5:00 alle 5:59 ogni domenica 45 19 1 * * Alle 19:45 1° di ogni mese 01 * 20 7 * A 1 minuto di ogni ora il 20 luglio 10 1 * 12 1 Alle 01:10 Ogni lunedì di dicembre 00 12 16 * Mer A mezzogiorno del 16 di ogni mese e cioè mercoledì 30 9 20 7 4 Alle 9:30 del 20 luglio e cioè giovedì 30 9 20 7 * Alle 9:30 dal 20 luglio indipendentemente dal giorno della settimana 20 * * * 6 Al 20° minuto di ogni ora il sabato 20 * * 1 6 Al 20° minuto di ogni ora il sabato di gennaio 
È anche possibile specificare elenchi nei campi. Le liste possono essere nella forma di 1,2,3,4 o nella forma di 1-4 che sarebbe la stessa cosa. Cron, allo stesso modo, supporta gli aumenti nelle liste, che sono così indicate:
 Valore o lista/incremento
Ancora una volta, gli elenchi e gli incrementi sono più facili da capire con gli esempi:
Esempio:
 Descrizione 59 11 * 1-3 1,2,3,4,5 Alle 11:59 Dal lunedì al venerdì, da gennaio a marzo 45 * 10-25 * 6-7 A 45 minuti di tutte le ore dalle 10 alle 25 di tutti i mesi e che il giorno è sabato o domenica 10,30,50 * * * 1,3,5 A 10, 30 e 50 minuti di tutte le ore il lunedì, mercoledì e venerdì * / 15 10-14 * * * Ogni quindici minuti dalle 10:00 alle 14:00 * 12 1-10 / 2 2,8 * Tutti i minuti delle ore 12, nei giorni 1,3,5,7 e 9 di febbraio e agosto. (L'incremento nel terzo campo è 2 e parte da 1) 0 * / 5 1-10,15,20-23 * 3 Ogni 5 ore dai giorni 1 al 10, giorno 15 e dal giorno 20 al 23 di ogni mese e che il giorno è mercoledì 3/3 2/4 2 2 2 Ogni 3 minuti a partire dal minuto 3 (3,6,9, ecc.) delle ore 2,6,10, ecc. (ogni 4 ore a partire dall'ora 2) il 2 febbraio e cioè martedì
Come si può vedere nell'ultimo esempio, l'attività cron assegnata a quella riga con quei dati verrà eseguita solo se vengono soddisfatti i 5 campi (AND). Cioè, affinché l'attività possa essere eseguita, deve essere martedì 2 febbraio alle 02:03. È sempre un AND booleano che restituisce vero solo se tutti e 5 i campi sono veri nel minuto specifico.
[color = rgb (0,0,0)] Il caso precedente chiarisce quindi che: [/ color]
Il programma cron viene invocato ogni minuto ed esegue i compiti che i suoi campi vengono svolti in quel preciso minuto.
Compreso il campo utente e il comando, le righe di crontab potrebbero quindi essere le seguenti:
 0 22 * ​​​​* * root /usr/daily backup.sh 0 23 * * 5 root /usr/weekly backup.sh 0 8.20 * * * jcarrillo mail -s "sistema in esecuzione" [email protected]
Le prime due righe vengono eseguite dall'utente root e la prima esegue ogni giorno alle 22:00 lo script che genera un backup giornaliero. Il secondo esegue ogni venerdì alle 23:00 uno script che genera un backup settimanale. La terza riga viene eseguita dall'utente sergio e verrebbe eseguita alle 8 del mattino e alle 8 di sera di tutti i giorni e il comando è inviare una mail all'account [email protected] con oggetto "sistema funzionante", un modo per un amministratore di essere consapevole che un sistema remoto è attivo negli orari specificati, ma se non riceve un'e-mail in quegli orari, qualcosa non va.
Essere radice, è possibile allora, modificare direttamente crontab:
 vim / etc / crontab 
Questo viene modificato direttamente.

Esecuzione di Cron con più utenti, comando crontab


Linux è un sistema multiutente e cron è una delle applicazioni che supporta il lavoro con più utenti contemporaneamente. Ogni utente può avere il proprio file crontab, infatti si presume che il file /etc/crontab sia il file crontab dell'utente root, anche se non c'è problema che siano inclusi altri utenti, e quindi il sesto campo che indica con precisione chi è l'utente. che esegue il compito ed è richiesto in:
 / etc / crontab

Ma quando gli utenti normali (e anche radice) vogliono generare il proprio file crontab, quindi useremo il comando crontab.
Nella directory /var/spool/cron (può variare a seconda della distribuzione), viene generato un file cron per ogni utente, sebbene questo file sia di testo, non dovrebbe essere modificato direttamente.
Ci sono quindi due situazioni, generando direttamente il file crontab con il comando:
 crontab -e
Con il quale si aprirà l'editor di default (generalmente vi) con il file chiamato crontab vuoto e dove l'utente entrerà nella sua task table e questa verrà automaticamente salvata come /var/spool/cron/user.
L'altro caso è che l'utente modifica un normale file di testo con le voci delle attività e ad esempio lo denomina 'my_cron', quindi il comando $> crontab my_cron sarà incaricato di stabilirlo come file cron dell'utente in / var / spool / cron / utente:
 vi my_cron # elimina i file dalla cartella condivisa 0 20 * * * rm -f /home/sergio/shared/* # esegue uno script che esegue un backup della cartella documenti il ​​primo giorno di ogni mese 0 22 1 * * /home /sergio/monthly support.sh # ogni 5 ore dal lunedì al venerdì, si assicura che i permessi siano corretti nella mia casa 1 * 5 * * * 1-5 chmod -R 640 / home / sergio / *: wq (il file)> ls mio_cron> crontab mio_cron (impostato su / var / spool / cron / utente)
Riassumendo quanto sopra e considerando altre opzioni per crontab:
 crontab file.cron (imposta il file.cron come crontab dell'utente) crontab -e (aprirà l'editor preimpostato in cui è possibile creare o modificare il file crontab) crontab -l (elenca il crontab corrente dell'utente, i suoi lavori cron) crontab -r (rimuove il crontab corrente dell'utente)
Su alcune distribuzioni quando si modificano i crontab dell'utente normale è necessario riavviare il servizio in modo che i file crontab in / var / spool / cron possano essere riletti.
 riavvio crond del servizio 
Per capire meglio come avviare/arrestare/riavviare i servizi, in questo articolo troverai maggiori informazioni.

Controllo dell'accesso a cron


Cron ti consente di controllare quali utenti possono o non possono utilizzare i servizi cron. Ciò si ottiene in modo molto semplice attraverso i seguenti file:
  • /etc/cron.allow
  • /etc/cron.deny
Per impedire a un utente di utilizzare cron o meglio il comando crontab, è sufficiente aggiungere il proprio nome utente al file /etc/cron.deny, per consentirne l'utilizzo sarebbe quindi aggiungere il proprio nome utente a /etc/cron.allow, se per qualche motivo vuoi negare l'uso di cron a tutti gli utenti, puoi scrivere la parola ALL all'inizio di cron.deny e questo sarebbe sufficiente.
 echo ALL >> / etc / cron.deny o per aggiungere un altro utente a cron.allow echo juan >> / etc / cron.allow
Se non esistono né il file cron.allow né il file cron.deny, in teoria l'uso di cron è senza restrizioni per l'utente. L'aggiunta di nomi utente in cron.allow, senza creare un file cron.deny, avrà lo stesso effetto della creazione con la parola ALL. Ciò significa che una volta che cron.allow è stato creato con un singolo utente, gli altri utenti che vogliono utilizzare cron dovranno sempre essere specificati in questo file.
ConclusioniAbbiamo parlato del suo funzionamento, spero tu abbia capito, alcune distribuzioni come Red Hat includono una variante come anacron che può sopperire ad alcune carenze di cron, anche così, a qualsiasi livello dal più elementare al più avanzato, viene utilizzato cron , è opportuno comprenderne il funzionamento . Se trovi qualche domanda o hai un suggerimento, non esitare a inserirlo nei commenti.Ti è piaciuto e hai aiutato questo Tutorial?Puoi premiare l'autore premendo questo pulsante per dargli un punto positivo

Aiuterete lo sviluppo del sito, condividere la pagina con i tuoi amici

wave wave wave wave wave