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 dispone 1,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 è presente 1-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 specificare 0,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 di 1,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 a 0 0 1 1 *.
  • @monthly- Eseguire l'attività specificata una volta al mese a mezzanotte del primo giorno del mese. Equivalente a 0 0 1 * *.
  • @weekly- Esegui l'attività specificata una volta a settimana a mezzanotte di domenica. Equivalente a 0 0 * * 0.
  • @daily- Esegui l'attività specificata una volta al giorno a mezzanotte. Equivalente a 0 0 * * *.
  • @hourly- Esegui l'attività specificata una volta all'inizio dell'ora. Equivalente a 0 * * * *.
  • @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 variabile SHELL.
  • 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. Se MAILTO è 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.