Sintassi
Formato Crontab
# ┌───── minute (0-59) # │ ┌───── hour (0-23) # │ │ ┌───── day of month (1-31) # │ │ │ ┌───── month (1-12) # │ │ │ │ ┌───── day of week (0-7, 0&7=Sun) # * * * * * command
Valori dei Campi
*Qualsiasi valore (wildcard)
,Lista valori: 1,3,5
-Intervallo: 1-5
/Passo: */10 (ogni 10)
0-59Intervallo minuti
0-23Intervallo ore
1-31Intervallo giorno del mese
1-12Intervallo mese (o JAN-DEC)
0-7Giorno della settimana (0&7=Dom, o SUN-SAT)
Stringhe Speciali
Pianificazioni Shorthand
@rebootEsegui una volta all'avvio
@yearly0 0 1 1 * — una volta all'anno (1 gen)
@monthly0 0 1 * * — una volta al mese (il 1°)
@weekly0 0 * * 0 — una volta a settimana (domenica)
@daily0 0 * * * — una volta al giorno (mezzanotte)
@hourly0 * * * * — una volta all'ora
Esempi
Pianificazioni Comuni
30 2 * * * /usr/local/bin/backup.sh 0 9 * * 1-5 /opt/report.sh */15 * * * * /usr/bin/health-check.sh 0 0 1 * * /opt/monthly-cleanup.sh 0 8,17 * * * /opt/notify.sh
Spiegazione delle Pianificazioni
30 2 * * *Ogni giorno alle 2:30
0 9 * * 1-5Giorni feriali alle 9:00
*/15 * * * *Ogni 15 minuti
0 0 1 * *Primo giorno del mese, mezzanotte
0 8,17 * * *Ogni giorno alle 8 e alle 17
Ambiente
Impostare Variabili
SHELL=/bin/bash PATH=/usr/local/bin:/usr/bin:/bin [email protected] HOME=/home/deploy * * * * * /opt/myjob.sh
Note sull'Ambiente
SHELLShell usata per i comandi (default /bin/sh)
PATHPercorso di ricerca (il default di cron è minimale)
MAILTOInvia output a questo indirizzo (vuoto = nessuna mail)
HOMEDirectory home per il job cron
Logging
Output e Logging
# redirect stdout + stderr to a log file */5 * * * * /opt/job.sh >> /var/log/job.log 2>&1 # discard all output 0 3 * * * /opt/job.sh > /dev/null 2>&1 # log only errors 0 3 * * * /opt/job.sh > /dev/null 2>> /var/log/job-err.log
Visualizzare i Log Cron
# Debian / Ubuntu (syslog) grep CRON /var/log/syslog # RHEL / CentOS cat /var/log/cron # journalctl (systemd) journalctl -u cron --since "1 hour ago"
Pianificazioni Comuni
Pattern Frequenti
0 * * * *Ogni ora esatta
*/5 * * * *Ogni 5 minuti
*/30 * * * *Ogni 30 minuti
0 0 * * *Ogni giorno a mezzanotte
0 6 * * 1Ogni lunedì alle 6
0 0 1,15 * *Il 1° e il 15 del mese
0 0 * * 5Ogni venerdì a mezzanotte
0 0 1 1 *Ogni 1° gennaio
Comandi crontab
Gestire i Crontab
crontab -e # edit your crontab crontab -l # list your crontab crontab -r # remove your crontab crontab -u alice -l # list another user's (root) crontab /path/to/file # install crontab from file
Posizioni Crontab di Sistema
/etc/crontabCrontab di sistema (ha campo utente)
/etc/cron.d/File cron drop-in
/etc/cron.daily/Script eseguiti giornalmente
/etc/cron.hourly/Script eseguiti ogni ora
/etc/cron.weekly/Script eseguiti settimanalmente
/etc/cron.monthly/Script eseguiti mensilmente
/var/spool/cron/Storage crontab per utente
Consigli
Best Practice
Usa percorsi assolutiIl PATH di cron è minimale; usa sempre percorsi completi
Redirige l'outputEvita flood di email con > /dev/null 2>&1
Lock fileUsa flock per evitare esecuzioni sovrapposte
Testa primaEsegui il comando manualmente prima di pianificarlo
Usa MAILTOImposta MAILTO="" per sopprimere tutte le email
Controlla il fuso orarioCron usa l'ora di sistema; verifica con date
Prevenire Sovrapposizioni con flock
# only run if not already running * * * * * /usr/bin/flock -n /tmp/job.lock /opt/job.sh