Formato e fuso orario di cron job

I cron job vengono pianificati a intervalli ricorrenti, specificati utilizzando un formato basato su unix-cron. Puoi definire una pianificazione in modo che il job venga eseguito più volte al giorno o in giorni e mesi specifici. Anche se non ne consigliamo più l'uso, la sintassi cron di App Engine legacy è ancora supportata per i job esistenti.

Formato cron job

Puoi utilizzare la console Google Cloud, Google Cloud CLI o l'API REST di Cloud Scheduler per impostare la tua pianificazione.

Una pianificazione viene definita utilizzando il formato stringa unix-cron (* * * * *), ovvero un insieme di cinque campi in una riga, che indicano quando deve essere eseguito il job.

I campi temporali hanno il seguente formato e i seguenti valori possibili e devono seguire questo ordine:

|------------------------------- Minute (0-59)
|     |------------------------- Hour (0-23)
|     |     |------------------- Day of the month (1-31)
|     |     |     |------------- Month (1-12; or JAN to DEC)
|     |     |     |     |------- Day of the week (0-6; or SUN to SAT; or 7 for Sunday)
|     |     |     |     |
|     |     |     |     |
*     *     *     *     *
Campo Formato dei valori validi
Minuto 0-59
Ora 0-23
Giorno del mese 1-31
Mese 1-12 (o da GEN a DIC)
Giorno della settimana 0-6 (o da SUN a SAT; o 7 per domenica)
  • Minuto: indica quanto tempo dopo il picco dell'ora di esecuzione del job, in minuti. Ad esempio, se il minuto è impostato su 0, il job viene eseguito all'inizio dell'ora (perché è 0 minuti dopo l'ora). Quindi, se l'ora è alle 08:00, il job viene eseguito alle 08:00.

  • Ora: indica quanto tempo dopo la mezzanotte viene eseguito il job, in ore (arrotondato per difetto all'ora più vicina, perché i minuti rimanenti sono indicati nel campo minute). Mezzanotte è 0 e mezzogiorno è 12. Ad esempio, se l'ora è impostata su 0, il job viene eseguito a mezzanotte (perché è 0 ore dopo mezzanotte).

  • Giorno del mese: indica la data di calendario del mese. Ad esempio, 1 per il primo giorno del mese. Cloud Scheduler non supporta L per indicare l'ultimo giorno del mese.

  • Mese: indica il mese. Specifica il numero del mese o le prime tre lettere del nome in maiuscolo. Ad esempio, 1 per gennaio o l'equivalente in valuta locale, JAN.

  • Giorno della settimana: indica il giorno della settimana. Lunedì è 1, martedì è 2 e così via. 0 o 7 possono indicare domenica. Specifica il giorno della settimana in base a un numero o alle prime tre lettere del nome del giorno della settimana in maiuscolo (ad esempio SUN per domenica).

    • Questo campo è valutato come un OR inclusivo con il campo day of the month, a meno che uno di questi campi non sia contrassegnato come senza restrizioni dall'asterisco (*). Ad esempio, se il giorno del mese è impostato su 1 e il giorno della settimana su SAT, il job viene eseguito il primo giorno del mese e ogni sabato del mese, anche se il primo giorno del mese non è un sabato. Se il giorno della settimana non ha limitazioni (impostato su *), il job viene eseguito solo il primo giorno del mese.

Corrisponde a tutti i valori

Per trovare la corrispondenza con tutti i valori di un campo, utilizza l'asterisco: *. Se un campo è impostato sull'asterisco, corrisponde a tutti i valori validi per quel campo ogni volta che sono soddisfatte le altre condizioni dei campi. L'impostazione di un campo con l'asterisco spesso è considerata come lasciare il campo senza restrizioni, perché non è limitato a un valore specifico.

Di seguito sono riportati due esempi di campo dei minuti non soggetto a restrizioni:

  • * 0 1 1 1: il job viene eseguito ogni minuto di mezzanotte del 1° gennaio e del lunedì.
  • * * * * *: il job viene eseguito ogni minuto (ogni ora, di ogni giorno del mese, di ogni mese, ogni giorno della settimana, perché anche tutti questi campi non hanno limitazioni).

L'asterisco equivale a un caso speciale di un intervallo, in cui l'intervallo inizia dal primo valore valido del campo e termina all'ultimo valore valido per il campo (ad esempio 0-59 per il campo dei minuti).

Corrispondenza di un intervallo

Per creare una corrispondenza con un intervallo di valori, specifica i valori di inizio e di fine, separati da un trattino (-). Non includere spazi nell'intervallo. Gli intervalli sono inclusi. Il primo numero deve essere inferiore al secondo. Se utilizzi nomi abbreviati per il mese o il giorno della settimana (ad esempio, JAN anziché 1 per il primo mese dell'anno), il primo valore deve essere precedente nel mese o nella settimana rispetto al secondo.

I seguenti esempi equivalenti vengono eseguiti a mezzanotte di lunedì, martedì, mercoledì, giovedì e venerdì (per tutti i mesi):

  • 0 0 * * 1-5
  • 0 0 * * MON-FRI

Corrispondenza di un elenco

Gli elenchi possono contenere qualsiasi valore valido per il campo, inclusi gli intervalli. Specifica i valori, separati da una virgola (,). Non includere spazi nell'elenco.

Esempi:

  • 0 0,12 * * *: il job viene eseguito a mezzanotte e mezzogiorno.
  • 0-5,30-35 * * * *: il job viene eseguito in ognuno dei primi cinque minuti di ogni mezz'ora (all'inizio dell'ora e alla mezz'ora).

Saltare i valori in un intervallo

Puoi saltare i valori di un intervallo specificando la frequenza con cui avanzare nell'intervallo. Talvolta viene utilizzata una funzione step (oppure un valore passaggio o un'espressione di frequenza). Per farlo, specifica l'intervallo, seguito dalla barra (/) e la frequenza alla quale vuoi saltare l'intervallo.

Puoi utilizzare l'asterisco (*) per indicare l'intervallo di tutti i valori del campo. Quando utilizzi l'asterisco, il primo valore dell'intervallo è 0 per i campi minuto, ora e giorno della settimana (domenica) e 1 per i campi giorno del mese e mese.

Il valore del passaggio non può essere superiore al valore massimo possibile per il campo. Il passaggio predefinito è 1, quindi la funzione step /1 equivale a non utilizzare affatto una funzione passo.

Intervalli di esempio che utilizzano le funzioni dei passaggi:

  • */2: questa è una funzione passaggio valida per qualsiasi campo. Nel campo dei minuti, corrisponde a 0, 2, 4, ... , 58. Per l'ora, corrisponde a 0, 2, 4, ... , 22. Per il giorno del mese, corrisponde a 1, 3, 5, ... , 31 (per un mese di 31 giorni). Per il mese, corrisponde a 1, 3, 5, ... , 11. Il giorno della settimana, corrisponde a 0, 2, 4, 6.

  • 0-12/2: questa è una funzione di passi valida per i campi dei minuti e dell'ora. Corrisponde a 0, 2, 4, ... , 12.

Esempi di programmazioni con le funzioni dei passaggi:

  • */2 * * * *: il job viene eseguito ogni due minuti.

  • 0 0-12/2 * * *: il job viene eseguito ogni due ore, ogni ora. La prima corsa è a mezzanotte. L'ultima esecuzione è a mezzogiorno.

Esempi di pianificazioni

La tabella seguente mostra alcune pianificazioni di cron job di esempio e la relativa descrizione:

Pianificazione Formato cron job Spiegazione
Ogni minuto * * * * * Esecuzione al minuto. Ad esempio, 9:00, 9:01, :02 e così via.
Ogni ora 0 * * * * Eseguito ogni ora. Ad esempio, 9:00, 10:00, 11:00 e così via.
Ogni giorno 0 0 * * * Viene eseguito ogni giorno alle ore 00:00 (nel formato 24 ore).
Ogni giorno feriale
(lun-ven)
I seguenti termini sono equivalenti:
  • 0 0 * * 1-5
  • 0 0 * * MON-FRI
Viene eseguito alle 00:00 (nel formato 24 ore) di lunedì, martedì, mercoledì, giovedì e venerdì.
Ogni settimana I seguenti termini sono equivalenti:
  • 0 0 * * 0
  • 0 0 * * 7
  • 0 0 * * SUN
Viene eseguito la domenica alle 00:00 (nel formato 24 ore).
Ogni mese 0 0 1 * * Viene eseguito alle ore 00:00 (nel formato 24 ore) del primo giorno del mese.
Ogni trimestre I seguenti termini sono equivalenti:
  • 0 0 1 1,4,7,10 *
  • 0 0 1 JAN,APR,JUL,OCT *
Viene eseguito alle 00:00 nel formato 24 ore del primo giorno del trimestre, con una pianificazione trimestrale standard: 1° gennaio, 1° aprile, 1° luglio e 1° ottobre.
Ogni anno I seguenti termini sono equivalenti:
  • 0 0 1 1 *
  • 0 0 1 JAN *
Viene eseguito alle ore 00:00 (nel formato 24 ore) del primo giorno del primo mese dell'anno (1° gennaio).

Fuso orario

Puoi selezionare il fuso orario per la valutazione della pianificazione nella console Google Cloud (nella pagina Crea un job, seleziona un fuso orario dall'elenco) o tramite il flag gcloud --time-zone durante la creazione del job. Il fuso orario predefinito è Etc/UTC.

Per alcuni fusi orari, l'ora legale può causare l'esecuzione o la mancata esecuzione inaspettata dei job. Questo perché Cloud Scheduler viene eseguito in base al tempo reale. Nei casi in cui un orario può verificarsi due volte (ad esempio in cui gli orologi vanno indietro) e il job è pianificato in questa data/ora, il job pianificato potrebbe osservare anomalie di esecuzione.

Se il tuo lavoro richiede una cadenza molto specifica, ti consigliamo di scegliere un fuso orario che non rispetti l'ora legale. In particolare, per evitare completamente il problema, è consigliato l'utilizzo di UTC per Cloud Scheduler.