Analizzatore di Espressioni Cron preview

Analizzatore di Espressioni Cron

Analizza espressioni cron in testo leggibile. Visualizza i prossimi tempi di esecuzione e usa esempi predefiniti.

Funzionalita principali

  • Spiegazioni cron leggibili
  • Anteprima dei prossimi 5 orari di esecuzione
  • Espressioni preimpostate comuni
  • Scomposizione visiva dei campi

Guide

Cron è un sistema di pianificazione dei processi basato sul tempo usato nei sistemi operativi di tipo Unix per eseguire comandi o script a intervalli specifici. Un'espressione cron è una stringa compatta che definisce una pianificazione usando cinque campi: minuto, ora, giorno del mese, mese e giorno della settimana. Pur essendo uno dei formati di pianificazione più usati nell'informatica, le espressioni cron sono notoriamente difficili da leggere a colpo d'occhio. Questa guida illustra la sintassi nel dettaglio, come leggere e scrivere le espressioni, i pattern comuni e i casi d'uso pratici. I cinque campi di un'espressione cron standard sono disposti da sinistra a destra: minuto (0-59), ora (0-23), giorno del mese (1-31), mese (1-12) e giorno della settimana (0-7, dove sia 0 sia 7 rappresentano la domenica). Ciascun campo accetta valori specifici, intervalli, elenchi e caratteri speciali. Un'espressione completa come 30 14 * * 1-5 significa alle 14:30 (le 2:30 PM) di ogni giorno da lunedì a venerdì. Il parser cron WebRecast traduce queste espressioni in italiano semplice e mostra i prossimi orari di esecuzione pianificati. L'asterisco (*) è il carattere jolly che significa ogni possibile valore. Nel campo minuto, * significa ogni minuto. Nel campo mese, * significa ogni mese. Quando tutti e cinque i campi sono asterischi (* * * * *), il processo viene eseguito ogni minuto di ogni ora di ogni giorno. È l'espressione cron più semplice e anche una delle più pericolose in produzione se non intendi eseguire qualcosa così frequentemente. Il carattere barra (/) specifica i valori a passo. */5 nel campo minuto significa ogni 5 minuti (0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55). */2 nel campo ora significa ogni 2 ore (0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22). Puoi combinare i passi con gli intervalli: 1-30/5 nel campo minuto significa ogni 5 minuti durante la prima mezz'ora (1, 6, 11, 16, 21, 26). I passi rendono facile creare intervalli regolari senza elencare ogni valore. La virgola (,) crea un elenco di valori specifici. 1,15 nel campo giorno del mese significa il giorno 1 e il 15 del mese. 0,30 nel campo minuto significa all'inizio dell'ora e a 30 minuti passati. MON,WED,FRI nel campo giorno della settimana (se la tua implementazione cron supporta i nomi) significa lunedì, mercoledì e venerdì. Gli elenchi sono utili quando la tua pianificazione non segue un intervallio regolare. Il trattino (-) definisce un intervallo. 9-17 nel campo ora significa ogni ora dalle 9 AM alle 5 PM. 1-5 nel campo giorno della settimana significa da lunedì a venerdì. Gli intervalli sono inclusivi, ovvero entrambi gli estremi sono inclusi. Puoi combinare intervalli con passi: 0-23/2 significa a ore alterne per tutto il giorno, e 1-5 nel campo giorno della settimana con */10 nel campo minuto significa ogni 10 minuti nei giorni feriali. Alcune implementazioni cron supportano caratteri aggiuntivi. Il punto interrogativo (?) è usato in alcuni sistemi (come lo scheduler Quartz) per indicare nessun valore specifico per il giorno del mese o il giorno della settimana quando vuoi specificarne uno ma non l'altro. Il carattere L significa ultimo (L nel campo giorno del mese significa l'ultimo giorno del mese). Il carattere W significa giorno feriale più vicino (15W significa il giorno feriale più vicino al 15). Il carattere cancelletto (#) specifica l'n-esima occorrenza di un giorno della settimana (2#3 significa il terzo martedì del mese). Il cron Unix standard non supporta questi caratteri, ma compaiono negli scheduler basati su Java e nei servizi cron delle piattaforme cloud. I pattern cron comuni coprono la maggior parte delle esigenze di pianificazione. Esegui ogni minuto: * * * * *. Esegui ogni 5 minuti: */5 * * * *. Esegui ogni ora al minuto 0: 0 * * * *. Esegui ogni giorno a mezzanotte: 0 0 * * *. Esegui ogni giorno alle 3:30 AM: 30 3 * * *. Esegui ogni settimana la domenica a mezzanotte: 0 0 * * 0. Esegui ogni mese il giorno 1 a mezzanotte: 0 0 1 * *. Esegui nei giorni feriali alle 9 AM: 0 9 * * 1-5. Esegui ogni 15 minuti durante l'orario di lavoro nei giorni feriali: */15 9-17 * * 1-5. Lo strumento parser cron include questi preset comuni come rapido riferimento. La gestione del fuso orario è una considerazione critica che l'espressione cron stessa non affronta. Un'espressione cron specifica un orario, ma in quale fuso orario? Su un server locale, cron in genere viene eseguito nel fuso orario di sistema del server. Le piattaforme cloud (AWS CloudWatch, Google Cloud Scheduler, Azure Logic Apps) permettono di specificare il fuso orario esplicitamente. Quando pianifichi processi che servono un pubblico globale o girano su infrastrutture cloud, verifica sempre e documenta a quale fuso orario fanno riferimento le tue espressioni cron. Un processo pianificato per 0 9 * * * significa le 9 AM nel fuso orario del server, che potrebbe essere UTC, la tua ora locale o altro ancora. L'ora legale crea casi limite per le pianificazioni cron. Quando gli orologi avanzano, l'ora dalle 2:00 AM alle 3:00 AM non esiste. Un processo pianificato per le 2:30 AM durante la transizione primaverile può essere saltato o eseguito alle 3:00 AM a seconda dell'implementazione cron. Quando gli orologi tornano indietro, l'ora dalle 1:00 AM alle 2:00 AM si verifica due volte. Un processo pianificato in questo periodo potrebbe girare due volte o una sola a seconda dell'implementazione. Usare UTC per le pianificazioni cron evita del tutto i problemi dell'ora legale, motivo per cui molti sistemi in produzione si standardizzano su UTC. Le esecuzioni sovrapposte si verificano quando un processo impiega più tempo a completarsi dell'intervallo tra le esecuzioni pianificate. Se un processo è pianificato ogni 5 minuti ma a volte impiega 8 minuti, l'esecuzione successiva inizia prima che la precedente finisca. Questo può causare contesa di risorse, corruzione dei dati o elaborazione duplicata. Il sistema cron in sé non previene le esecuzioni sovrapposte. Le soluzioni includono l'uso di file di lock (il processo verifica l'esistenza di un file di lock all'avvio ed esce se ne esiste uno), l'uso di flock (una utility di blocco dei file) o l'uso di uno scheduler di processi con controllo della concorrenza integrato. La registrazione e il monitoraggio dei processi cron sono essenziali per l'affidabilità in produzione. Un processo cron che fallisce silenziosamente è peggiore di uno che non è mai stato eseguito. Indirizza l'output del processo verso file di log aggiungendo >> /var/log/miojob.log 2>&1 al comando cron. Questo cattura sia lo standard output sia gli errori. Configura il monitoraggio per avvisarti quando un processo fallisce o non viene eseguito secondo la pianificazione. Servizi come Healthchecks.io e Cronitor forniscono monitoraggio con interruttore a uomo morto in cui il tuo processo cron effettua il ping di un URL al completamento e ricevi un avviso se il ping non arriva in tempo. Le differenze di ambiente tra la tua shell interattiva e l'ambiente cron causano molti fallimenti dei processi cron. Quando cron esegue un processo, usa un ambiente minimale che può mancare di voci PATH, variabili d'ambiente e configurazione della shell che ha la tua sessione interattiva. Se un processo funziona quando lo esegui manualmente ma fallisce in cron, la causa probabile è una variabile d'ambiente mancante o un eseguibile non trovato perché non è nel PATH di cron. Le soluzioni includono l'uso di percorsi assoluti per tutti gli eseguibili (/usr/bin/python3 invece di python3), l'impostazione esplicita delle variabili d'ambiente in cima al crontab o il caricamento del profilo della shell all'inizio dello script del processo. Il comando crontab gestisce la tua pianificazione cron. crontab -e apre il tuo file crontab in un editor. crontab -l elenca le voci correnti del crontab. crontab -r rimuove l'intero crontab (usa con cautela). Ciascuna riga nel file crontab è un commento (che inizia con #), un'assegnazione di variabile d'ambiente (MAILTO=admin@example.com) o una voce di pianificazione (i cinque campi temporali seguiti dal comando da eseguire). La variabile MAILTO invia l'output del processo a un indirizzo email, un utile meccanismo di monitoraggio per configurazioni piccole. Il cron a livello di sistema è gestito tramite file in /etc/cron.d/, /etc/cron.daily/, /etc/cron.hourly/, /etc/cron.weekly/ e /etc/cron.monthly/. Queste directory usano un formato leggermente diverso che include un campo nome utente tra la pianificazione e il comando, specificando quale account utente esegue il processo. I pacchetti di sistema e gli script di amministrazione del server in genere usano queste posizioni anziché i crontab dei singoli utenti. Le alternative moderne a cron includono i timer systemd sui sistemi Linux, che offrono funzionalità come ritardi casuali, gestione delle dipendenze e una migliore integrazione dei log. Le piattaforme cloud offrono i loro servizi di pianificazione: AWS EventBridge (ex CloudWatch Events), Google Cloud Scheduler, Azure Logic Apps e Kubernetes CronJobs. Questi servizi usano la sintassi delle espressioni cron ma aggiungono funzionalità come criteri di ripetizione, code dei messaggi non recapitabili e dashboard di monitoraggio. Comprendere la sintassi delle espressioni cron rimane essenziale perché tutti questi strumenti moderni usano lo stesso formato a cinque campi. I Kubernetes CronJobs meritano una menzione speciale perché combinano la pianificazione cron con l'orchestrazione dei container. Un Kubernetes CronJob crea un nuovo pod su pianificazione, esegue il processo in un container e ripulisce al completamento. Il campo schedule usa la sintassi cron standard. Una configurazione aggiuntiva controlla il criterio di concorrenza (Allow, Forbid o Replace), i limiti della cronologia dei processi riuscati e falliti, i secondi di scadenza per l'avvio e la funzionalità di sospensione. Se esegui carichi di lavoro su Kubernetes, i CronJobs sono il modo standard di pianificare attività ricorrenti. Il parser cron WebRecast prende la tua espressione e produce tre cose: una spiegazione leggibile della pianificazione (in linguaggio semplice come ogni 15 minuti nei giorni feriali), una scomposizione di ciascun campo che mostra quali valori corrispondono e i prossimi 5 orari di esecuzione pianificati in base alla data e all'ora correnti. Questo rende facile verificare che la tua espressione faccia ciò che intendi prima di distribuirla in produzione. Inserisci la tua espressione, leggi la spiegazione, controlla i prossimi orari di esecuzione e conferma che la pianificazione corrisponda ai tuoi requisiti. Testare le espressioni cron prima della distribuzione previene errori di pianificazione che possono avere conseguenze reali. Un processo di backup che gira ogni ora invece che ogni giorno spreca spazio su disco. Un processo di fatturazione che gira ogni giorno invece che ogni mese addebita troppo i clienti. Un processo di pulizia che gira ogni minuto invece che ogni ora crea un carico del server non necessario. Analizza e verifica sempre la tua espressione cron usando uno strumento come questo prima di aggiungerla al tuo crontab o alla configurazione dello scheduler cloud. I pochi secondi di verifica possono prevenire ore di debug o peggio.

Domande frequenti

Cos'è un'espressione cron?

Un'espressione cron è una stringa di 5 campi (minuto, ora, giorno, mese, giorno della settimana) che definisce una pianificazione per attività ricorrenti.

Cosa significa */5 in cron?

La sintassi */5 significa "ogni 5° intervallo". Ad esempio, */5 nel campo dei minuti significa ogni 5 minuti.

Guide correlate

Sezioni WebRecast correlate