Cron & crontab, spiegato

Lucaino ha pubblicato un po 'di tempo fa ottimo tutorial su cron e crontab che penso valga la pena condividere. Cron è una sorta di equivalente alle attività pianificate in Windows, solo che viene gestito dal terminale. Chi preferisce un'interfaccia visiva per raggiungere lo stesso obiettivo, può vederlo un altro elemento.

Cos'è cron?

Il nome cron deriva dal greco chronos che significa "tempo". Nel sistema operativo Unix, cron è un normale gestore di processi in background (demone) che esegue processi o script a intervalli regolari (ad esempio, ogni minuto, giorno, settimana o mese). I processi che devono essere eseguiti e l'ora in cui devono essere eseguiti sono specificati nel file crontab.

Come funziona

Il demone cron inizia da /etc/rc.d/ o / Etc / init.d a seconda della distribuzione. Cron viene eseguito in background, controlla la tabella delle attività crontab ogni minuto / etc / crontab o su / var / spool / cron alla ricerca di compiti da svolgere. Come utente possiamo aggiungere comandi o script con attività a cron per automatizzare alcuni processi. Ciò è utile ad esempio per automatizzare l'aggiornamento di un sistema o di un buon sistema di backup.

Articolo correlato:
Tutorial: installa i pacchetti .tar.gz e .tar.bz2

Cos'è Crontab?

Crontab è un semplice file di testo che memorizza un elenco di comandi da eseguire in un momento specificato dall'utente. Crontab verificherà la data e l'ora in cui eseguire lo script o il comando, i permessi di esecuzione e lo farà in background. Ogni utente può avere il proprio file crontab, infatti il ​​file / etc / crontab Si presume che sia il file crontab dell'utente root, quando gli utenti normali (e anche root) vogliono generare il proprio file crontab, allora useremo il comando crontab.

Crontab è il modo più semplice per gestire le attività di cron su sistemi multiutente, sia come semplice utente di sistema che come utente root.

Utilizzando crontab

Partiamo da un semplice esempio.

Stiamo per automatizzare l'aggiornamento di un sistema, per eliminare il fastidioso "Devo sempre aggiornare e non mi piace!"

come
Articolo correlato:
Comandi per conoscere il sistema (identificare hardware e alcune configurazioni software)

Prima di tutto faremo uno script. Questo script verrà chiamato da cron e conterrà tutte le istruzioni che vogliamo che faccia, quindi è necessario testarlo in diversi casi e in diversi modi prima di includerlo in cron, un semplice script di aggiornamento come questo:

#! / bin / bash #script update example #scegli la tua distribuzione # debian-ubuntu # apt-get update & apt-get -y upgrade #fedora #yum -y update #Arch #pacman --noconfirm -Syu

Rimuovi la # dalla tua linea di distribuzione. Nel caso in cui sia Ubuntu / Debian, inizia con apt-get.

Salviamo lo script come update.sh (ad es. La directory degli script nella tua home). Modifichiamo i permessi di esecuzione di detto script con:

chmod a + x ~ / scripts / update.sh

Eseguiamo lo script un paio di volte per verificare che tutto funzioni correttamente, modifichiamo ciò che è necessario (non deve contenere errori, altrimenti cron ripeterà solo un errore più e più volte). Ora per aggiungere l'attività al nostro crontab.

Aggiungi attività a crontab

Eseguiamo l'edizione del crontab con crontab -e, in alcune distribuzioni (come Ubuntu) ci dà la possibilità di scegliere l'editor di testo che vogliamo, il resto ci rimane con vi. Il file crontab avrà un aspetto simile a questo.

# mh dom mon dow comando utente

dove:

  • m corrisponde al minuto in cui verrà eseguito lo script, il valore è compreso tra 0 e 59
  • h l'ora esatta, viene gestito il formato 24 ore, i valori vanno da 0 a 23, dove 0 rappresenta mezzanotte.
  • dom si riferisce al giorno del mese, ad esempio è possibile specificare 15 se si desidera eseguire ogni 15 giorni
  • dow indica il giorno della settimana, può essere numerico (da 0 a 7, dove 0 e 7 sono domenica) o le prime 3 lettere del giorno in inglese: lun, mar, mer, gio, ven, sab, dom.
  • Utente definisce l'utente che eseguirà il comando, può essere root o un utente diverso purché abbia i permessi per eseguire lo script.
  • command si riferisce al comando o al percorso assoluto dello script da eseguire, esempio: /home/usuario/scripts/update.sh, se chiama uno script, deve essere eseguibile

Per essere chiari, alcuni esempi di attività di cron spiegati:

15 10 * * * utente /home/user/scripts/update.sh

Verrà eseguito lo script update.sh ogni giorno alle 10:15

15 22 * * * utente /home/user/scripts/update.sh

Verrà eseguito lo script update.sh ogni giorno alle 10:15

00 10 * * 0 root apt-get -y update Utente root

Verrà eseguito un aggiornamento ogni domenica alle 10:00

45 10 * * aggiornamento sun root apt-get -y

L'utente root eseguirà un aggiornamento ogni domenica (domenica) alle 10:45

30 7 20 11 * utente /home/usuario/scripts/update.sh

Il 20 novembre alle 7:30 l'utente eseguirà lo script

30 7 11 11 utente sun /home/usuario/scripts/pastel_con_velitas.sh

L'11 novembre alle 7:30 e cioè domenica, l'utente festeggerà il suo amministratore di sistema (cioè io)

01 * * * * user /home/usuario/scripts/molestorecordatorio.sh

Un fastidioso promemoria ogni minuto di ogni ora tutti i giorni (NON consigliato).

Possono ancora essere gestiti gamme speciali:

30 17 * * 1,2,3,4,5

Alle 5:30 del pomeriggio tutti i giorni dal lunedì al venerdì.

00 12 1,15,28 * *

A mezzogiorno ogni primo, quindicesimo e 12 di ogni mese (ideale per il libro paga)

Se questo crea confusione, crontab gestisce stringhe speciali per definire questi intervalli.

@reboot Esegui una volta, all'avvio
@yearly viene eseguito solo una volta all'anno: 0 0 1 1 *
@annualmente uguale a @yearly
@monthly viene eseguito una volta al mese, il primo giorno: 0 0 1 * *
@weekly Weekly il primo minuto della prima ora della settimana. 0 0 * * 0 ″.
@ tutti i giorni, alle 12:00 A.M. 0 0 * * *
@midnight uguale a @daily
@hourly al primo minuto di ogni ora: 0 * * * *

Il suo utilizzo è molto semplice.

@hourly user /home/user/scripts/molestorecordatorio.sh @monthly user /home/user/scripts/backup.sh @daily root apt-get update && apt-get -y upgrade

Ultimo, ma non per importanza:

Cron job management

file crontab

Sostituisci il file crontab esistente con un file definito dall'utente

crontab -e

Modifica il file crontab dell'utente, ogni nuova riga sarà una nuova attività crontab.

crontab -l

Elenca tutte le attività crontab dell'utente

crontab -d

Elimina il crontab dell'utente

crontab -c dir

Definisce la directory crontab dell'utente (deve avere le autorizzazioni di scrittura ed esecuzione dell'utente)

utente crontab -u

prefisso per gestire il crontab di un altro utente, esempi:

$ sudo crontab -l -u root $ sudo crontab -e utente2 #crontab -d -u utente

Questo strumento, come molti altri, può essere visto in modo più approfondito e più dettagliato in:

Grazie Lucain!

Lascia un tuo commento

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati con *

*

*

  1. Responsabile dei dati: Miguel Ángel Gatón
  2. Scopo dei dati: controllo SPAM, gestione commenti.
  3. Legittimazione: il tuo consenso
  4. Comunicazione dei dati: I dati non saranno oggetto di comunicazione a terzi se non per obbligo di legge.
  5. Archiviazione dati: database ospitato da Occentus Networks (UE)
  6. Diritti: in qualsiasi momento puoi limitare, recuperare ed eliminare le tue informazioni.

  1.   Immagine segnaposto Alvaro Ortiz suddetto

    Uff ... un po 'confuso.

  2.   tonico suddetto

    * / 30 manca (nel campo dei minuti) che viene eseguito ogni 30 minuti ...

    1.    erm3nda suddetto

      Proprio questo che stavo per commentare fino a quando non ho deciso di rivedere i commenti 😀
      Questo modificatore è un'informazione molto importante e qualcosa di molto utile.

      1.    Kika suddetto

        Ciao!
        In questo momento sto testando una configurazione ogni 45 minuti.

        * / 45 * * * * e l'istruzione viene eseguita a 45 minuti di ogni ora E ogni ora. Vale a dire:

        Funziona alle 3:45, quindi alle 4:00, alle 4:45, alle 5:00, alle 5:45, alle 6:00, alle 6:45 e così via.

        Ho qualcosa che non va? Cosa posso fare per farlo solo ogni 45 minuti, o almeno una volta ogni 45 minuti ogni ora.

    2.    Kika suddetto

      Ciao!
      In questo momento sto testando una configurazione ogni 45 minuti.

      * / 45 * * * * e l'istruzione viene eseguita a 45 minuti di ogni ora E ogni ora. Vale a dire:

      Funziona alle 3:45, quindi alle 4:00, alle 4:45, alle 5:00, alle 5:45, alle 6:00, alle 6:45 e così via.

      Ho qualcosa che non va? Cosa posso fare per farlo solo ogni 45 minuti, o almeno una volta ogni 45 minuti ogni ora.

  3.   Slack suddetto

    Ciao super utili le informazioni per chiarire come funziona cron.
    Byte

  4.   Slack suddetto

    per *

  5.   Cacciatore suddetto

    Eccellente, grazie per aver chiarito come funziona cron .. mettiamoci un po 'di mano 🙂

  6.   Giacobbe suddetto

    Questa riga da quanto ho capito verrà eseguita alle 10:15, correggimi se sbaglio
    Bene, lì dice 10:15
    15 22 * * * utente /home/user/scripts/update.sh

  7.   Agustin suddetto

    Ciao! informazioni molto buone.
    Per eseguire uno script ogni mezz'ora, la riga da aggiungere a CronTab sarebbe: "30 * * * * root Scrip.sh" Corretto? Grazie mille!

  8.   usiamo linux suddetto

    No. Se non ricordo male, per questo devi mettere / 30 * * * * root Scrip.sh.
    Cioè, aggiungi il / prima di 30.
    Saluti! Paolo.

  9.   Jonathan suddetto

    Ciao mi è piaciuto il tuo post, è molto completo ma volevo chiederti una cosa.
    Ho problemi con questo comando e uno come "at".

    Voglio eseguire uno script in un determinato momento e inserire

    in -f /home/mi_user/Desk/script.sh 18:08 esempio

    e lo script non viene eseguito sullo schermo, cioè nel terminale, viene eseguito in background?

    E con cron succede la stessa cosa, modifico il file crontab con "crontab -e"

    alla fine aggiungo questa riga:

    46 19 mio_utente /home/mi_user/Desk/script.sh

    e non fa nulla, non mostra il copione.

    Qualche suggerimento? Grazie mille e ci scusiamo per gli eventuali disagi

    1.    usiamo linux suddetto

      Affinché il terminale venga visualizzato, potrebbe essere necessario eseguire il terminale e passare lo script come parametro.

      Ad esempio:

      lxterminal -e "mio_utente /home/mi_user/Desktop/script.sh"

      Il parametro da utilizzare può variare in base all'emulatore di terminale utilizzato.

      Spero che funzioni.

      Abbraccio! Paolo.

  10.   patretca suddetto

    Il contributo è apprezzato.

    10 punti !!

    sal2!!

  11.   Rodolfo suddetto

    Grazie mille, mi ha aiutato molto a chiarire alcune cose, grazie totali, per maggiori dettagli o dubbi andrò alla PAGINA MAN, saluti ribaditi.

  12.   Jahir suddetto

    Zio grazie mille, ho letto e provato gli esempi. grazie mille ... è molto comprensibile. Saluti

  13.   giovanni suddetto

    Ho usato Ubuntu Server 12.04.2 LTS, e la versione di crontab che ho, per cancellare l'elenco dei lavori dell'utente è usata, crontab -r (e -l, come dice questo manuale). Certo è per questione di versioni.

    D'altra parte, una volta ho eseguito solo crontab e questo tipo di mi ha permesso di creare il mio file di esecuzione, ma questo non era quello che veniva eseguito. Quello che viene eseguito è quello in / etc / crontab. forse qualcuno userà il commento.

    PS (ho cercato con locate e whereis crontab ma ha restituito solo l'indirizzo di cui sopra e un altro file crittografato, quindi se quello che è stato eseguito era quello in / etc / crontab, ma quando si esegue il comando crontab -e, il mio apparirà con tutti i lavori che avevo definito) dove era archiviato questo file '???? Saluti. Accedo sempre con root.

  14.   Sebastian suddetto

    Eccellente, utilissimo !!!

  15.   mmm suddetto

    Ciao, vorrei fare questo ………… «15 10 * * * root ifdown eth0»

    vale a dire che a un certo punto la scheda di rete si spegne ………… beh, l'ho messa nel crontab e non ha funzionato …… .. come va?

    Saludos y gracias

  16.   Miguel suddetto

    Ti sei perso la definizione di "mon" dopo il titolo "Aggiungi attività a crontab"

    L'articolo è comunque carino, cron è estremamente utile.

  17.   Oscar suddetto

    Quanto è stato bello quel bel post, chiedimi
    Se voglio tenere traccia dei record lasciati dall'esecuzione delle attività, dove posso vederlo?

    è decidere voglio vedere la cronologia delle azioni fatte in passato di questo file e voglio vedere chi lo ha modificato e la data

    grazie

  18.   oscar suddetto

    Voglio controllare la cronologia delle modifiche di questo

    Come posso farlo

    grazie

  19.   Andres Ledo suddetto

    Buongiorno,

    Penso che nello script Ubuntu tu abbia commesso un errore, hai messo ap-get -y upgrade invece di apt-get -y upgrade. (Hai lasciato una t).

    Saluti.

    1.    usiamo linux suddetto

      Così è. Grazie!
      Abbraccio! Paolo

  20.   Gabriel suddetto

    Voglio sapere come creare un file cron per poter specificare l'ora in cui ogni volta viene eseguito, la directory, ecc.

  21.   Valentin suddetto

    Grazie per aver chiarito il funzionamento ei comandi di base per cron, ora per divertirti un po '.

  22.   Levigatrice suddetto

    Ogni volta che cerco informazioni su qualsiasi argomento relativo a Gnu / Linux, vado in tondo per trovare sempre nel 90% dei casi il miglior tutorial in questa grande comunità, penso che d'ora in poi inizierò qui e poi altrove.

    saluti

    1.    usiamo linux suddetto

      Grazie Sander! Un abbraccio! Paolo.

  23.   dario suddetto

    dom = giorno del mese
    dow = giorno della settimana
    è più facile se ti associ

  24.   Pasquale suddetto

    Grazie mille, molto completo e ben spiegato.

  25.   Mascella suddetto

    Questa è la stessa cosa che ci ha dato il mio insegnante di Sistemi Operativi, non cambio niente, ora capisco perché la classe è così male.

  26.   Marcelo suddetto

    Stimato,

    Domanda, la durata di un'attività può essere limitata?
    Ad esempio, ho un'attività che si ripete ogni 5 minuti, a ripetizione se l'attività è ancora attiva, interrompila ed esegui di nuovo.

    Grazie,
    Marcello.-

    1.    usiamo linux suddetto

      Ciao, Marcelo!

      Penso che sarebbe meglio se sollevi questa domanda nel nostro servizio di domande e risposte chiamato Chiedere DesdeLinux in modo che l'intera comunità possa aiutarti con il tuo problema.

      Un abbraccio, Pablo.

  27.   aj suddetto

    buon post.
    Qual è il comando per terminale per aggiungere attività al crontab (senza entrare nel crontab e aggiungerli manualmente con 'crontab -e' o sostituire il crontab con un altro crontab con 'crontab file').
    L'idea è di creare uno script esterno per aggiungere le attività al crontab
    grazie

    1.    david suddetto

      Penso che potresti usare "echo" qualunque cosa tu voglia aggiungere "| cat >> 'cronotab path (/ etc / cronotab)' «

  28.   Raffaello Vera suddetto

    Come verrebbe eseguita un'espressione esattamente ogni 3 giorni

  29.   José Antonio suddetto

    Hey.

    Ho un problema durante l'esecuzione di un cron job.

    Eseguo la seguente attività con cronta -e:

    01 * * * * root /home/user/script/mfile.sh

    ma il compito non è finito. Ho verificato che myfile.sh abbia il permesso di esecuzione e che l'utente che lo esegue sia root.

    Eseguo la stessa attività in / etc / crontab e dopo aver riavviato il servizio, non funziona nemmeno per me.
    Il contenuto di myfile.sh è un comando che aggiorna un DB e se lo eseguo nella console funziona.
    qualche idea di quale possa essere il problema?

    1.    Fredd suddetto

      L'utente del database potrebbe non disporre di tutte le autorizzazioni e dovrai prima esportare le variabili di ambiente dal tuo motore di database.
      Ad esempio in db2 questa riga andrebbe all'inizio dello script
      . / home / db2inst1 / sqllib / db2profile

      Un'altra causa potrebbe essere che lo script richiede la connessione al database, effettuare la connessione al database all'interno dello script

  30.   LA3 suddetto

    Non sapevo che dovevo ricominciare il crond, ci stavo litigando da un po '

  31.   kenia suddetto

    Sapranno indicare che l'attività viene eseguita ogni fine del mese, all'ora indicata .. il dettaglio è che non riesco a ottenere come so che prenda l'ultimo giorno di ogni mese .. ??? Ho dovuto scriverle una per una ma quando arriva la fine del mese di Febbraio che è biciesto per me è complicato ..

  32.   Gesù suddetto

    buona giornata!!

    Come interrompo il processo in esecuzione nel crontab?

  33.   Gesù suddetto

    processi * …………

  34.   Julianna suddetto

    Potrebbe essere che tu mi possa aiutare? eu tenho um script di minha autore che non funziona no crontab! já di tutti i permessi, nessun cron o utente privato specifico che possa eseguirlo - non succede quasi nulla! Vorrei sapere se puoi aiutarmi, alcune altre cose non funzionano cron! Vlws

  35.   Anthox suddetto

    Come faresti eseguire un'attività ogni ultimo giorno del mese (giorni: 31-30-28)?

  36.   tfercho suddetto

    Come già saprai, il comando su viene utilizzato per cambiare utente in una console. Se uso il comando su quindi: "il tuo utente" cambia utente ma senza le corrette impostazioni di "utente", se eseguo su come: "su - utente" cambia utente caricando le impostazioni dell'utente. Con cron indico l'utente, ma come faccio a caricare le impostazioni di questo utente?

  37.   rapinare suddetto

    E se voglio fermarlo?

  38.   Regi suddetto

    Ciao,
    Non so cosa sto sbagliando, ma seguo i passaggi e nulla viene eseguito. Ho provato:
    59 * * * * / usr / bin / gedit
    * * * * * / usr / bin / gedit
    * * * * * root / usr / bin / gedit
    * * * * * usr / bin / test.sh
    * * * * * root usr / bin / test.sh

    e niente di niente. Non esegue nulla. Ho riavviato e tutto il resto.

  39.   Ferqos suddetto

    muchas gracias