|
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: