Parser Espressioni Cron
Le espressioni cron definiscono le pianificazioni per le attivita ricorrenti nei sistemi Unix-like. Questo strumento analizza la sintassi cron (5-7 campi), spiega ogni campo in linguaggio semplice, calcola le prossime esecuzioni pianificate e avvisa sugli errori comuni. Supporta sia il formato crontab utente che il formato crontab di sistema con campi utente e comando.
Specifiche
Casi d'uso comuni
- Debug sul perche un cron job non viene eseguito negli orari previsti
- Comprensione delle espressioni cron ereditate nella configurazione
- Pianificazione di backup e manutenzioni
- Verifica delle pianificazioni delle pipeline CI/CD (GitHub Actions, GitLab CI)
- Test delle pianificazioni CronJob di Kubernetes prima del deploy
- Analisi delle voci crontab di sistema da /etc/crontab o /etc/cron.d/
Funzionalità
- Analisi di espressioni cron a 5 campi (standard), 6 campi (con secondi) e 7 campi (con secondi e anno)
- Supporto del formato crontab di sistema con campo utente (es. "0 5 * * * root /path/to/script")
- Estrazione e visualizzazione del comando dalle righe cron
- Spiegazione di ogni campo in linguaggio comprensibile
- Calcolo delle prossime 10 esecuzioni pianificate
- Supporto per intervalli (1-5), liste (1,3,5), passi (*/15) e nomi (MON, JAN)
- Avvisi su problemi comuni come la specifica del giorno 31 in una pianificazione
Esempi
Crontab di sistema con utente e comando
Provalo →Backup giornaliero alle 5 del mattino eseguito come utente root (formato crontab di sistema da /etc/crontab).
0 5 * * * root /usr/bin/backup.shCron con comando (crontab utente)
Provalo →Controllo stato ogni 5 minuti (formato crontab utente).
*/5 * * * * curl -s http://localhost/healthSuggerimenti
- I cinque campi sono: minuto (0-59), ora (0-23), giorno del mese (1-31), mese (1-12), giorno della settimana (0-6, Domenica=0).
- Il crontab di sistema (/etc/crontab, /etc/cron.d/*) ha un sesto campo per il nome utente prima del comando.
- I crontab utente (crontab -e) non hanno un campo nome utente; vengono eseguiti come proprietario del crontab.
- Usa * per "ogni" e */n per "ogni n-esimo".
- I nomi dei giorni (SUN-SAT) e dei mesi (JAN-DEC) sono case-insensitive.
- Fai attenzione con giorno-del-mese e giorno-della-settimana insieme; il comportamento varia tra le implementazioni.
Approfondimenti Parser Espressioni Cron
Cron e lo schedulatore di attivita basato sul tempo nei sistemi operativi Unix-like, e le espressioni cron sono la sintassi compatta per definire quando viene eseguita un'attivita. Il formato standard a cinque campi specifica minuto (0-59), ora (0-23), giorno del mese (1-31), mese (1-12) e giorno della settimana (0-6, dove 0 e Domenica). Un asterisco (*) corrisponde a tutti i valori, rendendo "* * * * *" un'esecuzione ogni minuto.
Oltre ai valori semplici, cron supporta diversi operatori. Gli intervalli (1-5) corrispondono a un arco contiguo. Le liste (1,3,5) corrispondono a valori discreti. I valori a passo (*/15) creano intervalli regolari. Questi si combinano: 1-5/2 nel giorno della settimana significa lunedi, mercoledi, venerdi. I campi mese e giorno della settimana accettano nomi a tre lettere (JAN-DEC, SUN-SAT).
Le implementazioni cron variano. I crontab utente hanno cinque campi piu il comando. I crontab di sistema aggiungono un campo nome utente. Alcune implementazioni supportano un sesto campo per i secondi (Spring, Quartz, Kubernetes) e un settimo per l'anno. AWS EventBridge, GitHub Actions e altri schedulatori cloud hanno ciascuno le proprie variazioni.
Tra le insidie comuni c'e l'interazione tra i campi giorno-del-mese e giorno-della-settimana: se entrambi sono specificati (non *), l'attivita viene eseguita quando una delle condizioni e vera (logica OR). La gestione dei fusi orari e un altro problema: i cron job vengono eseguiti nel fuso orario del sistema a meno che non sia impostato CRON_TZ, e le transizioni dell'ora legale possono causare il salto o la doppia esecuzione delle attivita.
L'operatore / crea valori a passo. */5 nel campo dei minuti significa "ogni 5 minuti" e produce esecuzioni ai minuti 0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50 e 55. Gli intervalli possono essere combinati con i passi: 10-30/5 significa ogni 5 minuti tra il minuto 10 e il minuto 30. Per eseguire un'attivita a un orario specifico in giorni specifici, imposta i campi minuto e ora all'orario desiderato e il campo giorno della settimana ai giorni target. Ad esempio, "30 14 * * 1-5" viene eseguito alle 14:30 da lunedi a venerdi, e "0 9 * * 0" viene eseguito alle 9:00 ogni domenica. Tutti gli orari sono interpretati nel fuso orario locale del server a meno che CRON_TZ non sia configurato esplicitamente.
Cron usa l'ora dell'orologio, il che significa che le transizioni dell'ora legale possono causare comportamenti inattesi. Quando gli orologi avanzano di un'ora, le attivita pianificate tra le 2:00 e le 2:59 potrebbero essere completamente saltate. Quando gli orologi tornano indietro, le attivita in quella finestra potrebbero essere eseguite due volte. Per le attivita critiche, impostare CRON_TZ=UTC evita questi problemi. In alternativa, evita di pianificare attivita durante la finestra di transizione, o progetta le attivita per essere idempotenti in modo che le esecuzioni duplicate siano innocue.
La sintassi cron e stata adottata ben oltre i sistemi Unix. I CronJob di Kubernetes, GitHub Actions, GitLab CI, AWS EventBridge, Google Cloud Scheduler, Spring @Scheduled e molte librerie di code di attivita usano tutti espressioni cron per la pianificazione. Tuttavia, ogni implementazione puo supportare funzionalita diverse: alcune aggiungono un campo per i secondi, alcune aggiungono un campo per l'anno, e alcune usano ? per indicare "nessun valore specifico" nei campi giorno-del-mese o giorno-della-settimana.