Cron è un demone di pianificazione che esegue attività a intervalli specificati. Queste attività sono chiamate cron job e sono utilizzate principalmente per automatizzare la manutenzione o l'amministrazione del sistema.
Ad esempio, puoi impostare un cron job 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.
I lavori cron possono essere programmati per l'esecuzione di un minuto, un'ora, un giorno del mese, un mese, un giorno della settimana o qualsiasi combinazione di questi.
Cos'è il file Crontab #
Crontab (tabella cron) è 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 dei singoli utenti.
I file crontab degli utenti sono denominati in base al nome dell'utente e la loro posizione varia in base ai sistemi operativi. Nelle distribuzioni basate su Red Hat come CentOS, i file crontab sono archiviati in /var/spool/cron
directory, mentre su Debian e Ubuntu i file sono archiviati nella directory /var/spool/cron/crontabs
directory.
Sebbene sia possibile modificare manualmente i file crontab dell'utente, si consiglia di utilizzare il crontab
comando.
Il /etc/crontab
file e gli script all'interno di /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 puoi anche inserire script all'interno di /etc/cron.{hourly,daily,weekly,monthly}
directory e gli script verranno eseguiti ogni hour/day/week/month
.
Sintassi Crontab e operatori #
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 dell'asterisco nel campo Ora, significa che l'attività verrà eseguita ogni ora.,
- L'operatore virgola consente di specificare un elenco di valori per la ripetizione. Ad esempio, se hai1,3,5
nel campo Ora, l'attività verrà eseguita alle 01:00, 3:00 e 5:00.-
- L'operatore trattino consente di specificare un intervallo di valori. Se hai1-5
nel campo Giorno della settimana, l'attività verrà eseguita ogni giorno della settimana (dal lunedì al venerdì)./
- L'operatore slash consente di specificare valori che verranno ripetuti in un determinato intervallo tra di loro. Ad esempio, se hai*/4
nel campo Ora, significa che l'azione verrà eseguita ogni quattro ore. È come specificare0,4,8,12,16,20
. Invece dell'asterisco prima dell'operatore barra, puoi anche utilizzare un intervallo di valori,1-30/10
significa lo stesso di1,11,21
.
File Crontab a livello di sistema #
La sintassi dei file crontab a livello di sistema è leggermente diversa da quella degli utenti crontab. Contiene un campo utente aggiuntivo obbligatorio che specifica quale utente eseguirà il lavoro cron.
* * * * * <username> command(s)
Macro predefinite #
Esistono diverse macro di pianificazione Cron speciali utilizzate per specificare intervalli comuni. Puoi utilizzare queste scorciatoie al posto della specifica della data a cinque colonne.
@yearly
(o@annually
) - Eseguire l'attività specificata una volta all'anno alla mezzanotte (00:00) del 1° gennaio. Equivalente a0 0 1 1 *
.@monthly
- Esegui 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 alla settimana a mezzanotte di domenica. Equivalente a0 0 * * 0
.@daily
- Esegui l'attività specificata una volta al giorno a mezzanotte. Equivalente a0 0 * * *
.@hourly
- Eseguire l'attività specificata una volta all'ora all'inizio dell'ora. Equivalente a0 * * * *
.@reboot
- Esegui l'attività specificata all'avvio del sistema (avvio).
Comando Linux Crontab #
Il crontab
comando ti consente di installare, visualizzare o aprire un file crontab per la modifica:
crontab -e
- Modifica il file crontab o creane uno se non esiste già.crontab -l
- Visualizza il contenuto del file crontab.crontab -r
- Rimuovi il tuo attuale file crontab.crontab -i
- Rimuovi il tuo attuale file crontab con una richiesta prima della rimozione.crontab -u <username>
- Modifica il file crontab di altri utenti. Questa opzione richiede i privilegi di amministratore di sistema.
Il comando crontab apre il file crontab utilizzando l'editor specificato da VISUAL
o EDITOR
variabili di ambiente.
Variabili Crontab #
Il demone cron imposta automaticamente diverse variabili di ambiente.
- Il percorso predefinito è impostato su
PATH=/usr/bin:/bin
. Se il comando che stai eseguendo non è presente nel percorso specificato da cron, puoi usare il percorso assoluto del comando o cambiare cron$PATH
variabile. Non puoi aggiungere implicitamente:$PATH
come faresti con uno script normale. - La shell predefinita è impostata su
/bin/sh
. Per cambiare la diversa shell, usaSHELL
variabile. - Cron richiama il comando dalla home directory dell'utente. La
HOME
la variabile può essere impostata nel crontab. - L'e-mail di notifica viene inviata al proprietario del crontab. Per sovrascrivere il comportamento predefinito, puoi utilizzare il
MAILTO
variabile di ambiente con un elenco (separato da virgole) di tutti gli indirizzi e-mail a cui si desidera ricevere le notifiche e-mail. QuandoMAILTO
è definito ma vuoto (MAILTO=""
), non viene inviata alcuna posta.
Restrizioni Crontab #
Il /etc/cron.deny
e /etc/cron.allow
files ti permette di controllare quali utenti hanno accesso a crontab
comando. I file sono costituiti da un elenco di nomi utente, un nome utente per riga.
Per impostazione predefinita, solo il /etc/cron.deny
il file esiste ed è vuoto, il che significa che tutti gli utenti possono utilizzare il comando crontab. Se vuoi negare l'accesso ai comandi crontab a un utente specifico, aggiungi il nome utente a questo file.
Se il /etc/cron.allow
esiste solo gli utenti che sono elencati in questo file possono usare il crontab
comando.
Se nessuno dei file esiste, solo gli utenti con privilegi di amministratore possono utilizzare crontab
comando.
Esempi di Cron Jobs #
Di seguito sono riportati alcuni esempi di cron job che mostrano come pianificare l'esecuzione di un'attività in 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:00
0 7 1-7 * 1 /path/to/script.sh
-
Esegui lo script a alle 21:15, il 1 e il 15 di ogni mese:
15 9 1,15 * * /path/to/script.sh
-
Imposta
HOME
personalizzata ,PATH
,SHELL
eMAILTO
variabili 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 #
Cron è un demone che ti consente di pianificare attività a una data e un'ora specifiche.
Sentiti libero di lasciare un commento in caso di domande.