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!