Introduzione
Cron è un deamon di pianificazione che esegue attività a intervalli specifici. Queste attività sono chiamate cron job e sono principalmente utilizzate per automatizzare la manutenzione o l'amministrazione del sistema.
Ad esempio, è possibile impostare un processo cron per automatizzare attività ripetitive come il backup di database o dati, l'aggiornamento del sistema con le ultime patch di sicurezza, il controllo dell'utilizzo dello spazio su disco, l'invio di e-mail e così via. Alcune applicazioni, come Drupal, Wordpress o Magento , richiedono cron job per eseguire determinate attività.
È possibile programmare l'esecuzione cron dei lavori per minuto, ora, giorno del mese, mese, giorno della settimana o qualsiasi combinazione di questi.
Cos'è il file Crontab
Crontab (cron table) è un file di testo che specifica la pianificazione dei lavori cron. Esistono due tipi di file crontab. I file crontab a livello di sistema e i file crontab di singoli utenti.
I file crontab degli utenti vengono archiviati in base al nome dell'utente e la loro posizione varia in base al sistema operativo. Nel sistema basato su Red Hat come CentOS, i file crontab sono memorizzati nella directory /var/spool/cron
mentre su Debian e Ubuntu i file sono memorizzati nella directory /var/spool/cron/crontabs
.
Sebbene sia possibile modificare manualmente i file crontab dell'utente, si consiglia di utilizzare il comando crontab
.
/etc/crontab
e i file all'interno della /etc/cron.d
directory sono file crontab a livello di sistema che possono essere modificati solo dagli amministratori di sistema.
Nella maggior parte delle distribuzioni Linux è anche possibile inserire script all'interno delle directory /etc/cron.{hourly,daily,weekly,monthly}
e gli script verranno eseguiti ogni hour/day/week/month
.
Sintassi e operatori di Crontab
Ogni riga nel file crontab dell'utente contiene sei campi separati da uno spazio seguito dal comando da eseguire.
* * * * * command(s)
- - - - -
| | | | |
| | | | ----- Day of week (0 - 7) (Sunday=0 or 7)
| | | ------- Month (1 - 12)
| | --------- Day of month (1 - 31)
| ----------- Hour (0 - 23)
------------- Minute (0 - 59)
I primi cinque campi possono contenere uno o più valori, separati da una virgola o da un intervallo di valori separati da un trattino.
*
-L'operatore asterisco indica qualsiasi valore o sempre. Se hai il simbolo asterisco nel campo Hour, significa che l'attività verrà eseguita ogni ora.,
-L'operatore virgola consente di specificare un elenco di valori per la ripetizione. Ad esempio, se si dispone1,3,5
nel campo Hour, l'attività verrà eseguita all'1:00, 3 e 5.-
-L'operatore trattino consente di specificare un intervallo di valori. Se è presente1-5
nel campo Day della settimana, l'attività verrà eseguita tutti i giorni feriali (dal lunedì al venerdì)./
-L'operatore barra consente di specificare valori che verranno ripetuti in un determinato intervallo tra loro. Ad esempio, se hai*/4
nel campo Hour, significa che l'azione verrà eseguita ogni quattro ore. È lo stesso che specificare0,4,8,12,16,20
. Invece di un asterisco prima dell'operatore barra, puoi anche usare un intervallo di valori,1-30/10
è lo stesso di1,11,21
.
File Crontab a livello di sistema (system-wide)
La sintassi dei file crontab a livello di sistema è leggermente diversa rispetto ai crontab dell'utente. Contiene un campo utente obbligatorio aggiuntivo che specifica quale utente eseguirà il processo cron.
* * * * * <username> command(s)
Macro predefinite
Esistono diverse macro di pianificazione Cron specifiche utilizzate per specificare intervalli comuni. È possibile utilizzare queste scorciatoie al posto della specifica della data a cinque colonne.
@yearly
(o@annually
) - Esegui l'attività specificata una volta all'anno a mezzanotte (12:00) del 1 ° gennaio. Equivalente a0 0 1 1 *
.@monthly
- Eseguire l'attività specificata una volta al mese a mezzanotte del primo giorno del mese. Equivalente a0 0 1 * *
.@weekly
- Esegui l'attività specificata una volta a settimana a mezzanotte di domenica. Equivalente a0 0 * * 0
.@daily
- Esegui l'attività specificata una volta al giorno a mezzanotte. Equivalente a0 0 * * *
.@hourly
- Esegui l'attività specificata una volta all'inizio dell'ora. Equivalente a0 * * * *
.@reboot
- Eseguire l'attività specificata all'avvio del sistema (tempo di avvio).
Comando Crontab di Linux
Il comando crontab consente di installare o aprire un file crontab per la modifica.
È possibile utilizzare il comando crontab per visualizzare, aggiungere, rimuovere o modificare i lavori cron utilizzando le seguenti opzioni:
crontab -e
- Modifica il file crontab o ne crea uno se non esiste già.crontab -l
- Visualizza il contenuto del file crontab.crontab -r
- Rimuovi il tuo file crontab corrente.crontab -i
- Rimuovere il file crontab corrente con un prompt prima della rimozione.crontab -u <username>
- Modifica altri file crontab di utilizzo. Richiede i privilegi di amministratore di sistema.
Il comando crontab apre il file crontab utilizzando l'editor specificato dalle variabili di ambiente VISUAL
o EDITOR
.
Variabili di Crontab
Il demone cron imposta automaticamente diverse variabili d'ambiente.
- Il percorso predefinito è impostato su
PATH=/usr/bin:/bin
. Se il comando che si sta chiamando è presente nel percorso specificato cron, è possibile utilizzare il percorso assoluto del comando o modificare la variabile cron$PATH
. Non puoi aggiungere implicitamente:$PATH
come faresti con uno script normale. - La shell predefinita è impostata su
/bin/sh
. È possibile impostare una shell diversa modificando la variabileSHELL
. - Cron richiama il comando dalla home directory dell'utente. La variabile
HOME
può essere sovrascritta dalle impostazioni nel crontab. - L'e-mail di notifica viene inviata al proprietario del crontab. Per sovrascrivere il comportamento predefinito, è possibile utilizzare la variabile
MAILTO
di ambiente con un elenco (separato da virgola) di tutti gli indirizzi e-mail che si desidera ricevere le notifiche e-mail. SeMAILTO
è definito ma vuoto (MAILTO=""
), non viene inviata alcuna posta.
Restrizioni Crontab
Gli amministratori di sistema possono controllare quali utenti hanno accesso al comando crontab
utilizzando i file /etc/cron.deny
e /etc/cron.allow
. I file sono costituiti da un elenco di nomi utente, un nome utente per riga.
Di default /etc/cron.deny
esiste solo il file ed è vuoto, il che significa che tutti gli utenti possono usare il comando crontab. Se si desidera negare l'accesso ai comandi crontab a un utente specifico, aggiungere il nome utente a questo file.
Se il file /etc/cron.allow
esiste solo gli utenti elencati in questo file possono utilizzare il comando crontab
.
Se nessuno dei file esiste, solo gli utenti con privilegi di amministratore possono usare il comando crontab
.
Cron Jobs Esempi
Di seguito sono riportati alcuni esempi di cron job che ti mostreranno come pianificare un'attività da eseguire su periodi di tempo diversi.
Esegui un comando alle 15:00 tutti i giorni dal lunedì al venerdì:
0 15 * * 1-5 command
Esegui uno script ogni 5 minuti e reindirizza l'output standard a dev null
, solo l'errore standard verrà inviato all'indirizzo e-mail specificato:
[email protected]
*/5 * * * * /path/to/script.sh > /dev/null
Esegui due comandi ogni lunedì alle 15:00 (usa l'operatore &&
tra i comandi):
0 15 * * Mon command1 && command2
Esegui uno script PHP ogni 2 minuti e scrivi l'output in un file:
*/2 * * * * /usr/bin/php /path/to/script.php >> /var/log/script.log
Esegui uno script ogni giorno, ogni ora, ogni ora, dalle 8:00 alle 16:00:
00 08-16 * * * /path/to/script.sh
Esegui uno script il primo lunedì di ogni mese, alle 7 del mattino
0 7 1-7 * 1 /path/to/script.sh
Esegui uno script alle 21:15, il 1° e il 15 di ogni mese:
15 9 1,15 * * /path/to/script.sh
Impostare le variabili personalizzate HOME
, PATH
, SHELL
e MAILTO
ed eseguire un comando ogni minuto.
HOME=/opt
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
SHELL=/usr/bin/zsh
[email protected]
*/1 * * * * command
Conclusione
Hai imparato come creare processi cron e pianificare attività in una data e ora specifiche.