Formato cron job e fuso orario

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 oppure in giorni e mesi specifici. (Sebbene non ne consigliamo più l'utilizzo, la pianificazione di un job tramite la creazione di un cron.yaml file è ancora supportata per i job esistenti.)

Cloud Scheduler supporta anche la pianificazione dei job utilizzando un formato più leggibile. Per saperne di più, consulta la sezione Formato alternativo per i job di questo documento.

Formato dei cron job

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

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

I campi relativi all'ora 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 GEN-DIC)
Giorno della settimana 0-6 (o DOM-SAB; o 7 per domenica)
  • Minuto: indica di quanti minuti dopo l'inizio dell'ora viene eseguito il job. Ad esempio, se il minuto è impostato su 0, il job viene eseguito all'inizio dell'ora (perché sono trascorsi 0 minuti dall'inizio dell'ora). Quindi, se l'ora è 08:00, il job viene eseguito alle 08:00.

  • Ora: indica di quante ore dopo la mezzanotte viene eseguito il job (arrotondato per difetto all'ora più vicina, perché i minuti rimanenti sono indicati nel campo minute). La mezzanotte è 0 e mezzogiorno è 12. Ad esempio, se l'ora è impostata su 0, il job viene eseguito all'ora di mezzanotte (perché sono trascorse 0 ore dalla 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 del mese in maiuscolo. Ad esempio, 1 per gennaio o in modo equivalente, JAN.

  • Giorno della settimana: indica il giorno della settimana. Ad esempio, lunedì è 1 e martedì è 2. È possibile indicare la domenica con 0 o 7. Specifica il giorno della settimana per numero o con le prime tre lettere del nome del giorno feriale in maiuscolo (ad esempio SUN per domenica).

    • Questo campo viene valutato come un OR inclusivo con il campo day of the month, a meno che uno di questi campi non sia contrassegnato come illimitato dall'asterisco (*). Ad esempio, se il giorno del mese è impostato su 1 e il giorno della settimana è impostato 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 è limitato (impostato su *), il job viene eseguito solo il primo giorno del mese.

Corrispondenza di tutti i valori

Per trovare la corrispondenza con tutti i valori di un campo, utilizza l'asterisco: *. Quando un campo è impostato sull'asterisco, il campo corrisponde a tutti i valori validi per quel campo ogni volta che le altre condizioni del campo sono soddisfatte. L'impostazione di un campo sull'asterisco viene a volte definita come lasciare il campo illimitato, perché non è limitato a un valore specifico.

Di seguito sono riportati due esempi in cui il campo dei minuti è illimitato:

  • * 0 1 1 1: il job viene eseguito ogni minuto dell'ora di mezzanotte il 1° gennaio e il lunedì.
  • * * * * *: il job viene eseguito ogni minuto (di ogni ora, di ogni giorno del mese, di ogni mese, ogni giorno della settimana, perché anche ognuno di questi campi è illimitato).

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

Corrispondenza di un intervallo

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

I seguenti esempi equivalenti vengono eseguiti a mezzanotte il lunedì, il martedì, il mercoledì, il giovedì e il 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 a mezzogiorno.
  • 0-5,30-35 * * * *: il job viene eseguito in ognuno dei primi cinque minuti di ogni mezz'ora (all'inizio dell'ora e a mezz'ora).

Ignorare i valori in un intervallo

Puoi ignorare i valori in un intervallo specificando una frequenza con cui scorrere l'intervallo. A volte si parla di utilizzo di una funzione a gradino (o valore o espressione di frequenza). Per farlo, specifica l'intervallo, seguito dalla barra (/) e dalla frequenza con cui vuoi scorrere l'intervallo.

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

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

Esempi di intervalli che utilizzano funzioni a gradino:

  • */2: questa è una funzione a gradino valida per qualsiasi campo. Per il 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. Per il giorno della settimana, corrisponde a 0, 2, 4, 6.

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

Esempi di pianificazioni che utilizzano funzioni a gradino:

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

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

Pianificazioni di esempio

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

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

Fuso orario

Puoi selezionare il fuso orario per la valutazione della pianificazione nella Google Cloud console (nella pagina Crea un job, seleziona un fuso orario dall' elenco) o tramite il flag gcloud --time-zone quando crei il job.

Il valore di questo campo deve essere l'abbreviazione del fuso orario utilizzata nel database tz. Il fuso orario predefinito è UTC.

Per alcuni fusi orari, l'ora legale può causare l'esecuzione o la mancata esecuzione imprevista dei job. Questo perché Cloud Scheduler viene eseguito in base all'ora locale. Nei casi in cui un'ora può verificarsi due volte (ad esempio quando gli orologi vengono spostati indietro) e il job programmato è pianificato in questo orario, il job programmato potrebbe presentare anomalie di esecuzione.

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

Formato alternativo per i job

Puoi utilizzare un formato di specifica dell'ora più leggibile, noto come groc, che fornisce un'alternativa alle espressioni cron.

Tieni presente che quando specifichi una pianificazione dei job utilizzando groc, devi utilizzare Google Cloud CLI o effettuare una richiesta diretta all'API Cloud Scheduler.

Ad esempio, alcuni eventi ricorrenti potrebbero essere difficili da specificare utilizzando cron, come "il terzo martedì di ogni mese" o "ogni due settimane" (ogni 336 ore). In questi casi, puoi utilizzare invece costrutti come i seguenti esempi:

03 of month 12:34
1,3,4,7,11,18,29 of jan,jul 12:34
1st friday of quarter 9:00
1st,third monday of month 04:00
2nd,3rd tue,wed,thu of feb,aug 13:50
every 336 hours
every 48 hours
every 5 minutes
every 60 minutes on mon,wed
every day 09:00
every minute
every sun,tue,thu 9:00
every wed of december 00:00
first sunday of month 12:00
second,4th tue,thursday of 3rd month of quarter 18:30

Per saperne di più sulla sintassi, consulta la sezione Definire la pianificazione dei cron job.

Passaggi successivi