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.
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!"
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:
Uff ... un po 'confuso.
* / 30 manca (nel campo dei minuti) che viene eseguito ogni 30 minuti ...
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.
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.
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.
Ciao super utili le informazioni per chiarire come funziona cron.
Byte
per *
Eccellente, grazie per aver chiarito come funziona cron .. mettiamoci un po 'di mano 🙂
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
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!
No. Se non ricordo male, per questo devi mettere / 30 * * * * root Scrip.sh.
Cioè, aggiungi il / prima di 30.
Saluti! Paolo.
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
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.
Il contributo è apprezzato.
10 punti !!
sal2!!
Grazie mille, mi ha aiutato molto a chiarire alcune cose, grazie totali, per maggiori dettagli o dubbi andrò alla PAGINA MAN, saluti ribaditi.
Zio grazie mille, ho letto e provato gli esempi. grazie mille ... è molto comprensibile. Saluti
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.
Eccellente, utilissimo !!!
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
Ti sei perso la definizione di "mon" dopo il titolo "Aggiungi attività a crontab"
L'articolo è comunque carino, cron è estremamente utile.
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
Voglio controllare la cronologia delle modifiche di questo
Come posso farlo
grazie
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.
Così è. Grazie!
Abbraccio! Paolo
Voglio sapere come creare un file cron per poter specificare l'ora in cui ogni volta viene eseguito, la directory, ecc.
Grazie per aver chiarito il funzionamento ei comandi di base per cron, ora per divertirti un po '.
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
Grazie Sander! Un abbraccio! Paolo.
dom = giorno del mese
dow = giorno della settimana
è più facile se ti associ
Grazie mille, molto completo e ben spiegato.
Questa è la stessa cosa che ci ha dato il mio insegnante di Sistemi Operativi, non cambio niente, ora capisco perché la classe è così male.
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.-
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.
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
Penso che potresti usare "echo" qualunque cosa tu voglia aggiungere "| cat >> 'cronotab path (/ etc / cronotab)' «
Come verrebbe eseguita un'espressione esattamente ogni 3 giorni
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?
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
Non sapevo che dovevo ricominciare il crond, ci stavo litigando da un po '
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 ..
buona giornata!!
Come interrompo il processo in esecuzione nel crontab?
processi * …………
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
Come faresti eseguire un'attività ogni ultimo giorno del mese (giorni: 31-30-28)?
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?
E se voglio fermarlo?
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.
muchas gracias