Command Palette

Search for a command to run...

Generatore di espressioni Cron: crea un programma Crontab di cui ti puoi fidare

Generatore di espressioni Cron: crea un programma Crontab di cui ti puoi fidare

T
Toolz Team
|Aug 23, 2026|16 min letto

Parte della raccolta Ora e data

Il peggior bug di produzione che abbia mai causato è stato un personaggio in un'espressione cron Volevo che a mezzanotte venisse eseguito un backup del database ogni sera Ho scritto 0 0 * * * nella mia testa, digitato 0 0 * * 0 nel crontab, e sono andato avanti Il lavoro è andato avanti una volta - la domenica seguente - e poi non di nuovo per una settimana Ho scoperto quando avevo bisogno di un backup che non esisteva Quella singola cifra fuori posto ha trasformato & quot; ogni giorno" in " ogni domenica, & quot; e niente nella sintassi mi ha avvertito Cron fa esattamente quello che gli dici, in silenzio, per sempre.

tl; dr: la Generatore di espressioni cron costruisce un'espressione crontab standard a cinque campi da campi semplici o preset con un clic, la spiega in una frase durante la digitazione e visualizza in anteprima i tempi di esecuzione successivi in UTC in modo da poter confermare la pianificazione prima che raggiunga la produzione Viene eseguito interamente nel browser: nessun account, nessun caricamento.

Ho costruito questo strumento per Toolz.dev perché non ho mai più voluto commettere un programma che avevo solo controllato nella mia testa Leggendo un'espressione cron come semplice inglese e vedendo le date effettive in cui sparerà prende il 0 -contro- * classe di errore istantaneamente Questa guida copre il funzionamento della sintassi cron, le interazioni che fanno scattare quasi tutti e come utilizzare il generatore per produrre un'espressione di cui ti puoi fidare.

Che cosa è un'espressione cron?

Un'espressione cron è una schedula compatta fatta di cinque campi separati da spazi Da sinistra a destra sono minuti, ore, giorno del mese, mese e giorno della settimana La forma a cinque campi è specificata da POSIX nel formato di ingresso Crontab. Uno scheduler: il classico Unix cron demone, ma anche sistemi CI, Kubernetes CronJobs e innumerevoli task runner: legge l'espressione e attiva il tuo lavoro in ogni momento che corrisponde a tutti i campi.

Ogni campo accetta più di un singolo numero Una stella (A star)*) significa & quot; every" valore di quel campo Un elenco come 1,15,30 significa diversi valori specifici Un intervallo come 1-5 significa una campata inclusiva Un passo come */15 significa & quot; ogni quindicesimo& quot; valore a partire dal campo's minimo Si combinano questi attraverso i cinque campi per descrivere quasi tutti i programmi ricorrenti: ogni minuto, ogni quarto d'ora, nei giorni feriali alle 8:00, il primo di ogni mese, l'ultimo trimestre's giorno di apertura Il potere è reale, e così è la densità - cinque campi possono codificare un programma sorprendentemente preciso, che è esattamente il motivo per cui sono facili da ottenere sottilmente sbagliato.

Ecco il layout del campo utilizzato dal generatore, con l'intervallo valido per ciascuno:

Posizione campo Gamma banconote
1 minuto 0–59
2 ora 0–23 Orologio 24 ore su 24
3 giorno del mese 1–31
4 mese 12 JANDEC anche accettato
5 giorno della settimana 06 0 e 7 significano entrambi domenica; SUNSAT accettato

Perché generare l'espressione invece di scriverla a mano

Scrivere cron a mano è una scommessa che hai ricordato correttamente l'ordine del campo, gli intervalli e le interazioni, senza feedback finché il lavoro non viene eseguito o non riesce a farlo Il generatore sostituisce quella scommessa con la conferma Quando compili i campi fa tre cose contemporaneamente.

Innanzitutto, assembla e convalida l'espressione, cogliendo valori fuori intervallo, intervalli invertiti e passaggi non validi con un messaggio che nomina il campo incriminato Un'espressione come 0 25 * * * - l'ora 25 non esiste - viene rifiutata con una spiegazione piuttosto che accettata e silenziosamente non viene mai eseguita.

In secondo luogo, rende il programma come una frase. 0 8 * * 1-5 diventa & quot; Alle 08:00 dal lunedì al venerdì.& quot; Leggere il programma a parole è il modo più veloce per notare che ciò che hai costruito non è ciò che intendevi Il mio bug di backup di mezzanotte sarebbe stato evidente nell'istante in cui ho letto & quot; Alle 00:00 di domenica& quot; invece di & quot; Alle 00:00.& quot;

In terzo luogo, presenta in anteprima i tempi di esecuzione futuri effettivi. Vedere che un lavoro verrà attivato tra tre mesi invece di stasera ti dice che qualcosa non va molto più visceralmente che fissare gli asterischi. Questa anteprima cattura anche programmi impossibili: chiedi il 30 febbraio e il generatore non mostra alcuna esecuzione imminente, perché non ce ne sono.

Come utilizzare il generatore di espressioni Cron

Passaggio 1: inizia da una preimpostazione o da una tabula rasa

Il percorso più veloce per un'espressione corretta è partire da una che è già vicina Scegli un preset come & quot;Weekdays at 8am, & quot; & quot;Every 15 minutes, & quot; or & quot; First of month at midnight, & quot; and the fields load ready to adjust Se nessuno si adatta, inizia dal default di ogni minuto e modifica Esistono preset perché la maggior parte dei programmi reali sono variazioni su una dozzina di schemi comuni, e partire da un'espressione noto-buona elimina un'intera categoria di errori.

Passo 2: Imposta i cinque campi

Inserisci un valore in ogni campo, o lascialo come * per & quot; every.& quot; Ogni campo accetta un singolo valore, un elenco di virgole, un intervallo di trattini o un passaggio barrato Ad esempio, per eseguire all'inizio di ogni ora durante le ore lavorative nei giorni feriali, impostare minute to 0, ora per 9-17e giorno della settimana a 1-5, lasciando il giorno del mese e del mese come *. Il suggerimento sotto ogni campo ti ricorda il suo intervallo valido in modo da non dover memorizzare l'ordine.

Passaggio 3: leggi la descrizione in inglese semplice

Guarda l'aggiornamento della descrizione mentre digiti Questo è il passaggio che ti salva Se la frase non corrisponde alla pianificazione nella tua testa, l'espressione è sbagliata e l'hai scoperto nel browser invece che in produzione una settimana dopo Conferma l'ora, i giorni e qualsiasi restrizione mensile leggi come intendi.

Passaggio 4: controlla le esecuzioni successive e copia

Fai clic qui per visualizzare in anteprima i prossimi tempi di esecuzione, calcolati in UTC. Scansionarli per individuare eventuali elementi sorprendenti - un intervallo troppo lungo, una prima esecuzione troppo lontana o un elenco vuoto che segnala una data impossibile Quando la pianificazione appare corretta, copia l'espressione e incollalala nel tuo crontab, pipeline o manifesto CronJob.

La trappola del giorno del mese e del giorno della settimana

Se ricordi una cosa di cron, falla così, perché sorprende quasi tutti la prima volta Quando ambo il campo del giorno del mese e il campo del giorno della settimana sono limitati, il che significa che nessuno dei due lo è * - cron standard li combina con OR, non con AND. Il lavoro viene eseguito quando uno dei due condizioni corrispondenze.

Così 0 0 13 * 5 non significa & quot; mezzanotte di venerdì 13.& quot; Significa & quot; mezzanotte del 13 di ogni mese, e anche mezzanotte di ogni venerdì.& quot; Sono programmi molto diversi; il secondo si attiva molte volte al mese Questo comportamento deriva direttamente dall'implementazione originale di Vixie cron che la maggior parte degli scheduler eredita, e il generatore lo onora esattamente La sua anteprima di prossima esecuzione ti mostrerà sia il 13 che il venerdì, che è il modo più chiaro possibile per catturare un OR non intenzionale.

La regola pratica: lasciare uno dei campi di due giorni come * a meno che tu non voglia veramente il comportamento OR. Se hai veramente bisogno di & quot; Solo venerdì 13, & quot; cron non può esprimerlo in un'espressione: gestisci quella logica nel tuo lavoro Vedere le date di esecuzione effettive nell'anteprima è ciò che trasforma questo da un gotcha in agguato in un fatto ovvio e visibile.

Passi, intervalli ed elenchi nella pratica

La sintassi del passo è dove vive molta potenza di pianificazione e dove inizia molta confusione. */5 nel campo minuti significa minuti 0, 5, 10, 15 e così via a 55 - & quot; ogni cinque minuti.& quot; Puoi ancorare un passo a un intervallo: 0-30/10 significa solo minuti 0, 10, 20 e 30. un valore nudo con un passaggio, come 5/15 nel campo minuti, significa & quot; a partire da 5, ogni 15" fino al campo massimo - 5, 20, 35, 50.

Elenchi e gamme si combinano liberamente. 1,4,7,10 nel campo mese si dà un programma trimestrale - gennaio, aprile, luglio, ottobre. 1-5 nel giorno della settimana ti dà dal lunedì al venerdì. 9-17 nel campo delle ore ti dà una finestra da nove a cinque Mescolandoli, 0 9-17 * * 1-5 si legge come & quot; al minuto 0 di ogni ora dalle 9 alle 17, dal lunedì al venerdì" - un battito cardiaco comune nelle ore lavorative Il generatore espande e convalida tutto questo e la descrizione spiega cosa hai costruito in modo che non ci sia ambiguità, ad esempio, se un intervallo è inclusivo (lo è).

Casi d'uso comuni

Backup e manutenzione programmati. Il cron job canonico Genera 0 2 * * * per un backup notturno alle 2 del mattino, leggi la descrizione per confermare che è giornaliera e non settimanale, e visualizza in anteprima le prossime corse per essere sicuro che la prima sia stasera Questo è l'errore esatto che ho fatto anni fa, e quello esatto che l'anteprima impedisce.

CI e programmi di distribuzione. Le build notturne, le esecuzioni di test pianificate e le distribuzioni periodiche utilizzano tutte la sintassi cron in GitHub Actions, GitLab CI e sistemi simili Costruisci l'espressione qui, confermala e incollalala nel file del flusso di lavoro Poiché questi sistemi vengono eseguiti sui propri server, nota l'avvertenza del fuso orario di seguito.

Pipeline di dati e report. Un rapporto settimanale ogni lunedì alle 6 del mattino è 0 6 * * 1; un rollup mensile sul primo è 0 0 1 * *; un lavoro trimestrale è 0 0 1 1,4,7,10 *. Generare questi e rileggerli indietro ferma il classico & quot;ran nel giorno e quot sbagliati; incidente della pipeline.

Riscaldamento della cache e battiti cardiaci. Lavori ad alta frequenza come */5 * * * * mantenere le cache calde o controlli di salute ticchettio L'anteprima conferma l'intervallo è quello che ti aspetti piuttosto che, diciamo, una volta all'ora perché hai messo il passo nel campo sbagliato.

Apprendimento cron. Se stai ancora costruendo l'intuizione, il generatore è uno strumento didattico Digita un'espressione, leggi la frase, vedi le esecuzioni e la mappatura tra sintassi e comportamento diventa concreta in un modo che la documentazione da sola non gestisce mai.

Una nota sui fusi orari

L'anteprima di esecuzione successiva calcola i tempi in UTC in modo che il risultato sia deterministico e lo stesso per tutti coloro che leggono questo I veri demoni cron, tuttavia, vengono eseguiti nel server's fuso orario locale se non configurato diversamente, e i fornitori di CI hanno ciascuno la propria convenzione - molti predefiniti in UTC, alcuni no. L'espressione stessa non porta alcun fuso orario; è lo scheduler che decide Quindi quando sposti un'espressione da questo strumento a un sistema live, conferma che il fuso orario system's e compensa di conseguenza i tempi di esecuzione nella tua testa. UN 0 0 * * * il lavoro è mezzanotte, ma mezzanotte cui dipende interamente da dove viene eseguito il lavoro Se è necessario ragionare sugli offset del fuso orario, il convertitore fuso orario è utile e il convertitore timestamp aiuta quando i registri dello scheduler vengono eseguiti come timestamp Unix.

Generazione rispetto all'analisi di un'espressione

Questo strumento costruisce un'espressione dai campi Suo fratello, il Parser dell'espressione cron, va dall'altra parte: incolla un'espressione esistente e questa la spiega e ne anticipa le esecuzioni I due coprono le due direzioni dello stesso problema Usa il generatore quando conosci la pianificazione che desideri e hai bisogno della sintassi; usa il parser quando hai ereditato un'espressione e devi capire cosa fa Entrambi onorano la stessa semantica Vixie-cron, inclusa la regola del giorno del mese O del giorno della settimana, quindi la descrizione che leggi in uno corrisponde al comportamento che vedresti nell'altro Insieme sono una piccola coppia focalizzata all'interno del kit più ampio che descrivo nel Toolkit per sviluppatori web panoramica e più ampia Guida agli strumenti di codifica.

Privacy: tutto gira nel tuo browser

Non c'è niente da caricare qui, e non viene caricato nulla L'espressione è costruita, convalidata, descritta e simulata interamente in codice lato client Ciò conta più di quanto potrebbe sembrare: le pianificazioni di lavoro interne possono rivelare cose su un sistema's architettura e cadenza che non vorresti sederti in una terza parte's logs Puoi confermare che lo strumento è autonomo disconnettendendoti da internet - continua a funzionare Questo è lo stesso principio lato client dietro ogni strumento su Toolz.dev, che io sostengo completamente nel Privacy dei dati negli strumenti online articolo.

FAQ

Come scrivo un'espressione cron?

Un'espressione cron standard ha cinque campi separati da spazi: minuto, ora, giorno del mese, mese e giorno della settimana Ogni campo è un valore specifico, un elenco, un intervallo, un passaggio o * per ogni. Ad esempio, 0 8 * * 1-5 significa alle 08:00 dal lunedì al venerdì Questo strumento costruisce l'espressione per te e mostra cosa significa mentre procedi.

Cosa significano i cinque campi di cron?

Da sinistra a destra (0 destra 9), ora (0 mese 3), giorno 1, mese 1 3), mese (1 settimana 2), giorno (0 e 7 significano entrambi domenica) Una stella significa & & 3; ogni& quot; valore di quel campo Le etichette degli strumenti di ogni campo in modo da non dover ricordare l'ordine.

Cosa fa */5 significa in cron?

La barra introduce un valore di passo Nel campo minuti, */5 significa & quot; ogni 5 minuti& quot; - 0, 5, 10, 15 e così via Puoi combinare i passaggi anche con gli intervalli: 0-30/10 nel campo minuti significa minuti 0, 10, 20 e 30. i passaggi sono il modo standard per esprimere & quot; ogni N unità."

Perché il mio lavoro funziona più spesso del previsto con il set del giorno del mese e del giorno della settimana?

Questa è la sorpresa cron più comune Quando sia il campo del giorno del mese che quello del giorno della settimana sono limitati (nessuno dei due lo è *), cron standard li tratta come OR, non AND - il lavoro viene eseguito quando una delle due condizioni corrisponde. COSÌ 0 0 13 * 5 corre il 13 del mese e ogni venerdì, non solo venerdì 13 Lascia un campo come * a meno che tu non voglia veramente il comportamento della sala operatoria.

In quale fuso orario sono mostrati i prossimi tempi di esecuzione?

L'anteprima calcola le prossime esecuzioni in UTC in modo che il risultato sia lo stesso per tutti I demoni cron reali utilizzano il fuso orario del server (o un'impostazione TZ), quindi se il tuo server viene eseguito in una zona diversa, compensa i tempi di conseguenza L'espressione stessa non porta alcun fuso orario - è lo scheduler che decide.

Posso usare nomi come mon o jan invece dei numeri?

Sì. Il campo mese accetta JAN da parte a parte DEC e il campo del giorno della settimana accetta SUN da parte a parte SAT, case-insensitive Lo strumento li capisce quando convalida e descrive la tua espressione I valori numerici sono più portabili tra gli scheduler, quindi il generatore emette numeri, ma l'input denominato è completamente supportato.

è lo stesso della sintassi crontab?

Sì, questo genera il cron Unix/Vixie standard a cinque campi utilizzato da crontab, dalla maggior parte dei sistemi CI e Kubernetes CronJobs Alcuni scheduler aggiungono un campo di sesto secondo o estensioni non standard come @reboot; quelli non fanno parte dello standard a cinque campi Per la stragrande maggioranza delle esigenze di pianificazione, l'espressione a cinque campi prodotta da questo strumento è esattamente ciò che desideri.

Il mio programma viene inviato da qualche parte?

No. L'espressione è costruita, convalidata, descritta e simulata interamente nel tuo browser con codice lato client Nulla viene caricato o memorizzato Puoi confermarlo disconnettendoti da internet - il generatore funziona ancora.


Comments

0 comments

0/2000 characters

No comments yet. Be the first to share your thoughts!