bitlvl
IT

Scheda cron

L’ordine dei campi, le pianificazioni che servono davvero e le tre trappole che spiegano la maggior parte dei ticket «il mio job cron non gira».

Sta in una pagina A4 / Letter verticale; usa «Salva come PDF» nella finestra di stampa per conservarne una copia.

Sintassi

┌─ minuto (0–59)
│ ┌─ ora (0–23)
│ │ ┌─ giorno del mese (1–31)
│ │ │ ┌─ mese (1–12, jan–dec)
│ │ │ │ ┌─ giorno della settimana (0–7, sun–sat; 0 e 7 = domenica)
* * * * *  comando
*ogni valore
5esattamente 5
1-5intervallo
*/15ogni 15
1,15lista
8-18/2passo dentro un intervallo

Stringhe speciali

@rebootuna volta all’avvio
@hourly0 * * * *
@daily / @midnight0 0 * * *
@weekly0 0 * * 0
@monthly0 0 1 * *
@yearly / @annually0 0 1 1 *

Pianificazioni

* * * * *ogni minuto
*/5 * * * *ogni 5 minuti
*/15 9-17 * * 1-5ogni 15 min, orario di lavoro, giorni feriali
0 * * * *ogni ora, allo scoccare
30 * * * *ogni ora e 30
0 */6 * * *ogni 6 ore (0, 6, 12, 18)
0 0 * * *ogni giorno a mezzanotte
0 3 * * *ogni giorno alle 03:00
30 6 * * 1-5giorni feriali alle 06:30
0 9,17 * * 1-5giorni feriali alle 09:00 e alle 17:00
0 0 * * 0domenica a mezzanotte
0 0 * * 6,0fine settimana
0 0 1 * *primo del mese
0 0 1,15 * *il 1º e il 15
0 0 1 */3 *trimestrale (1º gen, apr, lug, ott)
0 0 1 1 *annuale
0 0 * * 1#1primo lunedì (non standard; usa 0 0 1-7 * 1)
0 0 1-7 * 1primo lunedì — attenzione: scatta nei giorni 1–7 OPPURE ogni lunedì; aggiungi il test [ $(date +\%u) = 1 ]
0 0 28-31 * * [ $(date -d tomorrow +\%d) = 01 ] && cmdultimo giorno del mese
0 2 * * * sleep $((RANDOM \% 1800)); cmd02:00 con fino a 30 min di jitter

Trappole

  • PATH è minimale (/usr/bin:/bin). Usa percorsi assoluti o imposta PATH=… in cima al crontab.
  • % significa a capo nel comando; scrivi \% (date +\%F).
  • Nessun profilo di shell: alias, nvm, rbenv, venv non vengono caricati.
  • Il fuso orario è quello del demone (di solito quello di sistema, spesso UTC sui server). CRON_TZ=Europe/Rome funziona in cronie.
  • Giorno del mese E giorno della settimana entrambi impostati = gira quando uno dei due corrisponde.
  • L’output viene spedito via mail all’utente; redirigilo o imposta MAILTO=.
  • Sovrapposizione: cron fa ripartire il job anche se l’ultimo è ancora in esecuzione. Racchiudilo in flock -n /tmp/job.lock cmd.

Comandi

crontab -emodifica il tuo crontab
crontab -lelenca
crontab -rrimuove tutto (senza conferma!)
crontab -u www-data -ldi un altro utente (root)
/etc/crontab, /etc/cron.d/*crontab di sistema: hanno un campo utente dopo la pianificazione
/etc/cron.{hourly,daily,weekly,monthly}/script drop-in, eseguiti da anacron sui desktop
grep CRON /var/log/syslog; journalctl -u cronvedi cosa è girato

Un modello sicuro

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
[email protected]
SHELL=/bin/bash
# m h dom mon dow  comando
30 6 * * 1-5  flock -n /run/backup.lock /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1

I risultati e i messaggi di questo strumento sono mostrati in inglese.

Domande

Come verifico cosa significa un’espressione cron?

Incollala nello strumento di spiegazione cron; stampa la pianificazione in parole semplici e le prossime dieci esecuzioni nel tuo fuso orario.