Utilizza il file cron.yaml
per definire le attività pianificate per la tua applicazione.
Per scoprire di più sulla pianificazione delle attività, incluso come testare, eseguire il deployment o eliminare i job cron, consulta Pianificazione delle attività con Cron.
Esempio
Di seguito è riportato un file cron.yaml
di esempio:
cron:
- description: "daily summary job"
url: /tasks/summary
schedule: every 24 hours
- description: "monday morning mailout"
url: /mail/weekly
schedule: every monday 09:00
timezone: Australia/NSW
- description: "new daily summary job"
url: /tasks/summary
schedule: every 24 hours
target: beta
Sintassi
Il filecron.yaml
deve trovarsi nella directory principale dell'applicazione, accanto a app.yaml
:
cron.yaml
configura le attività pianificate per l'applicazione Python 2.
Per ulteriori informazioni sul formato YAML, consulta
il sito web YAML.
Definizioni di cron job
Elemento | Descrizione |
---|---|
description |
Facoltativo. La descrizione è visibile nella console Google Cloud e nell'interfaccia di amministrazione del server di sviluppo. Racchiudi il valore della descrizione tra virgolette. |
retry_parameters |
Facoltativo. Se il gestore di richieste di un cron job restituisce un codice di stato HTTP
non compreso nell'intervallo 200-299 (inclusi), App Engine considera
il job non riuscito. Per impostazione predefinita, i job non riusciti non vengono tentati di nuovo. Puoi far sì che vengano ritentati job non riusciti includendo un blocco di nuovi parametri nel file di configurazione.
Per ulteriori informazioni, consulta la sezione Nuovi tentativi cron di Google. |
schedule |
Obbligatorio. Definisce la pianificazione dell'esecuzione del cron job. Vedi la sintassi riportata di seguito. |
target |
La stringa
Se non viene trovato il nome del servizio specificato per
Se utilizzi un
file di invio, il tuo job potrebbe essere reindirizzato. Ad esempio, considerati i seguenti file # cron.yaml cron: - description: "test dispatch vs target" url: /tasks/hello_service2 schedule: every 1 mins target: service1 # dispatch.yaml: dispatch: - url: '*/tasks/hello_service2' service: service2 |
timezone |
timezone deve essere il nome di un nome di fuso orario
zoneinfo standard. Se non specifichi un fuso orario,
la pianificazione sarà
in UTC (noto anche come GMT).
|
url |
Obbligatorio.
Il campo url specifica un URL nell'applicazione che verrà
richiamato dal servizio Cron. Per ulteriori informazioni, consulta la sezione Protezione degli URL per il cron.
|
Definizione del cron job schedule
I cron job sono pianificati a intervalli ricorrenti e vengono specificati utilizzando un semplice formato di tipo inglese. Puoi definire una pianificazione in modo che il job venga eseguito più volte al giorno o in giorni e mesi specifici.
- Intervalli subgiornalieri
Utilizza un intervallo giornaliero secondario per eseguire un job più volte al giorno in una pianificazione ripetitiva. Puoi definire un intervallo di fine o un intervallo di inizio:
Intervallo di fine: definisce il tempo che intercorre tra l'"ora di fine" di un job e l'avvio del job successivo, dove l'"ora di fine" corrisponde all'ora in cui il job viene completato o al timeout. Il servizio Cron esegue i job in questo tipo di intervallo nell'arco di 24 ore, a partire dalle ore
00:00
, e attende il periodo di tempo specificato tra un job e l'altro.Esempio: per la pianificazione
every 5 minutes
, il job viene eseguito ogni giorno a un intervallo di 5 minuti. Se un'istanza di un job in esecuzione in questa pianificazione viene completata alle 02:01, il job successivo attende 5 minuti e ricomincia alle 02:06.Intervallo di inizio: definisce un intervallo di tempo regolare affinché il servizio Cron avvii ciascun job. A differenza dell'intervallo di fine, l'intervallo di inizio esegue ogni job indipendentemente dal momento in cui il job precedente viene completato o si è verificato il timeout. Puoi impostare un intervallo di tempo entro il quale vuoi eseguire il job oppure eseguire job 24 ore al giorno, a partire da
00:00
.Poiché l'ora di inizio di un job è rigida, se un'istanza di un job viene eseguita per un periodo più lungo dell'intervallo di tempo definito, il servizio Cron può saltare un job. Una singola ora di inizio nell'intervallo può essere saltata se il job precedente non è stato completato o è in timeout.
Esempio: per la pianificazione
every 5 minutes from 10:00 to 14:00
, il primo job inizia alle ore10:00
e, successivamente, ogni 5 minuti. Se il primo job viene eseguito per 7 minuti, il job10:05
viene ignorato e, di conseguenza, il servizio Cron non esegue un'altra istanza di questo job fino al giorno10:10
.
- Intervallo personalizzato
Puoi utilizzare un intervallo personalizzato per definire una pianificazione in cui il job può essere eseguito una volta al giorno in uno o più giorni selezionati e in uno o più mesi selezionati. I job eseguiti in base a una pianificazione personalizzata vengono eseguiti tutto l'anno, solo all'ora specifica nei giorni e nei mesi selezionati.
Esempio: per la pianificazione
1,2,3 of month 07:00
, il job viene eseguito una volta alle ore07:00
, nei primi tre giorni di ogni mese.
Considerazioni importanti per schedule
:
- Devi decidere se utilizzare un intervallo secondario o personalizzato. Non puoi combinare e utilizzare elementi dei vari
tipi di intervallo. Di seguito è riportato un esempio di definizione di pianificazione non valida:
schedule: every 6 hours mon,wed,fri
. - Deve essere eseguita una sola istanza di un job in qualsiasi momento. Il servizio Cron è progettato per fornire la distribuzione "almeno una volta". In altre parole, se un job viene pianificato, App Engine invia la richiesta di job almeno una volta. In alcuni rari casi, è possibile che vengano richieste più istanze dello stesso job. Di conseguenza, il gestore delle richieste deve essere idempotente e il codice deve garantire che non ci siano effetti collaterali dannosi in questo caso.
Formattazione di schedule
Per specificare quando viene eseguito il job, devi definire l'elemento schedule
utilizzando la
seguente sintassi:
schedule: [TYPE] [INTERVAL_VALUE] [INTERVAL_SCOPE]
Scegli un tipo di intervallo per definire l'elemento schedule
:
- [TYPE]: gli intervalli giornalieri devono includere il prefisso
every
.Esempio:
schedule: every 12 hours
- [INTERVAL_VALUE]: un valore intero e l'unità di tempo corrispondente. Valori validi per l'unità di tempo:
minutes
omins
hours
- [INTERVAL_SCOPE]: non applicabile. Per impostare un'ora di inizio o un intervallo specifico entro il quale vuoi eseguire i job, consulta la sintassi per Intervallo ora di inizio o Intervallo personalizzato.
- Esempi di intervalli di tempo di fine
- Utilizza i seguenti esempi per capire come definire le pianificazioni dei job che utilizzano un intervallo di tempo di fine:
- Viene eseguito ogni giorno alle 00:00 e attende 5 minuti tra un job e l'altro. Al termine di ogni job, il servizio Cron attende 5 minuti prima di eseguire il job successivo:
schedule: every 5 minutes
- Viene eseguito ogni giorno alle 00:00 e attende 30 minuti tra un job e l'altro. Al termine di ogni job, il servizio Cron attende 30 minuti prima di eseguire il job successivo:
schedule: every 30 mins
- Viene eseguito ogni giorno alle 00:00 e attende 5 minuti tra un job e l'altro. Al termine di ogni job, il servizio Cron attende 5 minuti prima di eseguire il job successivo:
- [TYPE]: gli intervalli giornalieri devono includere il prefisso
every
.Esempio:
schedule: every 12 hours
- [INTERVAL_VALUE]: un valore intero e l'unità di tempo corrispondente. Valori validi per l'unità di tempo:
minutes
omins
hours
- [INTERVAL_SCOPE] Specifica una clausola che corrisponde a [INTERVAL_VALUE]. Puoi definire un intervallo di tempo personalizzato o utilizzare l'opzione 24 ore
synchronized
.- Includi la clausola
from [HH:MM] to [HH:MM]
per definire un'ora di inizio e un intervallo specifici entro il quale vuoi eseguire i job.Devi specificare i valori dell'ora nel formato 24 ore,
HH:MM
, dove:HH
sono numeri interi compresi tra00
e23
.MM
sono numeri interi compresi tra00
e59
.
- Utilizza
synchronized
per specificare un intervallo di tempo di 24 ore (from 00:00 to 23:59
) diviso uniformemente per il valore [INTERVAL_VALUE].Importante: [INTERVAL_VALUE] deve dividere 24 in un numero intero, altrimenti si verifica un errore. I valori validi per [INTERVAL_VALUE] includono:
1
,2
,3
,4
,6
,8
,12
o24
.
- Includi la clausola
- Esempi di intervalli di inizio
- Utilizza i seguenti esempi per capire meglio come definire le pianificazioni dei job che utilizzano un intervallo di tempo di inizio:
- Eseguita ogni 5 minuti dalle 10:00 alle 14:00, tutti i giorni:
schedule: every 5 minutes from 10:00 to 14:00
- Eseguito una volta ogni ora dalle 08:00 alle 16:00, tutti i giorni:
schedule: every 1 hours from 08:00 to 16:00
- Eseguita una volta ogni due ore, tutti i giorni a partire dalle ore 00:00:
schedule: every 2 hours synchronized
- Eseguita ogni 5 minuti dalle 10:00 alle 14:00, tutti i giorni:
- [TIPO]: gli intervalli personalizzati possono includere il prefisso
every
per definire un intervallo ripetitivo oppure puoi definire un elenco specifico di giorni di un mese:- Per definire un intervallo ripetitivo puoi utilizzare il
prefisso
every
.Esempi:
schedule: every day 00:00 schedule: every monday 09:00
- Per definire giorni specifici, devi utilizzare i numeri ordinali. I valori validi vanno dal primo giorno di un mese al numero massimo di giorni del mese, ad esempio:
1st
ofirst
2nd
osecond
3rd
othird
- E fino a:
31st
othirtyfirst
Esempio:
schedule: 1st,3rd tuesday schedule: 2nd,third wednesday of month 09:00
- Per definire un intervallo ripetitivo puoi utilizzare il
prefisso
- [INTERVAL_VALUE]: gli intervalli personalizzati includono un elenco dei
giorni specifici in cui vuoi eseguire il job. L'elenco deve essere definito in un elenco separato da virgole e può includere uno dei seguenti valori:
- Il valore intero del giorno del mese fino a un massimo di 31 giorni, ad esempio:
1
2
3
- E fino a:
31
- Il nome del giorno in una combinazione dei seguenti valori lunghi o abbreviati:
monday
omon
tuesday
otue
wednesday
owed
thursday
othu
friday
ofri
saturday
osat
sunday
osun
- Usa
day
per specificare tutti i giorni della settimana.
Esempi:
schedule: 2nd monday,thu schedule: 1,8,15,22 of month 09:00 schedule: 1st mon,wednesday,thu of sep,oct,nov 17:00
- Il valore intero del giorno del mese fino a un massimo di 31 giorni, ad esempio:
- [INTERVAL_SCOPE]: specifica una clausola che corrisponde al valore [INTERVAL_VALUE] specificato. Gli intervalli personalizzati possono includere la
clausola
of [MONTH]
, che specifica un singolo mese di un anno, o un elenco separato da virgole di più mesi. Devi anche definire un'ora specifica in cui vuoi eseguire il job, ad esempio:of [MONTH] [HH:MM]
.Per impostazione predefinita, se la clausola
of
viene esclusa, l'intervallo personalizzato viene eseguito ogni mese.- [MESE]: devi specificare i mesi in un elenco separato da virgole e puoi includere una combinazione dei seguenti valori lunghi o abbreviati:
january
ojan
february
ofeb
march
omar
april
oapr
may
june
ojun
july
ojul
august
oaug
september
osep
october
ooct
november
onov
december
odec
- Utilizza
month
per specificare tutti i mesi dell'anno.
- [HH:MM]: devi specificare i valori dell'ora nel formato 24 ore,
HH:MM
, dove:HH
sono numeri interi compresi tra00
e23
.MM
sono numeri interi compresi tra00
e59
.
Esempio:
schedule: 1st monday of sep,oct,nov 09:00 schedule: 1 of jan,april,july,oct 00:00
- [MESE]: devi specificare i mesi in un elenco separato da virgole e puoi includere una combinazione dei seguenti valori lunghi o abbreviati:
- Esempi di intervalli personalizzati
- Utilizza i seguenti esempi per capire come definire le pianificazioni dei job che utilizzano un intervallo personalizzato:
- Eseguito ogni giorno alle ore 00:00:
schedule: every day 00:00
- Eseguita ogni lunedì alle 09:00:
schedule: every monday 09:00
- Verrà eseguita una volta il secondo mercoledì di marzo alle ore 17:00:
schedule: 2nd wednesday of march 17:00
- Sei volte a maggio. Nelle prime due settimane, viene eseguita una volta ogni lunedì, mercoledì e venerdì alle 10:00:
schedule: 1st,second mon,wed,fri of may 10:00
- Eseguita una volta alla settimana. Ogni sette giorni a partire dal primo giorno di ogni mese, viene eseguito una sola volta alle 09:00:
schedule: 1,8,15,22 of month 09:00
- Eseguita a settimane alterne. Il primo e il terzo lunedì di ogni mese, viene eseguito una sola volta alle 04:00:
schedule: 1st,third monday of month 04:00
- Viene eseguito tre volte all'anno. Il primo lunedì di settembre,
ottobre e novembre viene eseguita una sola volta alle 09:00:
schedule: 1st monday of sep,oct,nov 09:00
- Eseguita una volta ogni trimestre. Il primo giorno di gennaio, aprile,
luglio e ottobre viene eseguito una sola volta alle 00:00:
schedule: 1 of jan,april,july,oct 00:00
- Eseguito ogni giorno alle ore 00:00:
Nuovi cron
Se il gestore di richieste di un cron job restituisce un codice di stato non compreso nell'intervallo 200-299 (inclusi), App Engine considera che il job non è riuscito. Per impostazione predefinita, i job non riusciti non vengono tentati di nuovo. Puoi causare nuovi tentativi in job non riusciti includendo un blocco
nel file di configurazione.retry_parameters
cron:
- description: "retry demo"
url: /retry
schedule: every 10 mins
retry_parameters:
min_backoff_seconds: 2.5
max_doublings: 5
Sintassi dei nuovi tentativi cron
I parametri per i nuovi tentativi sono descritti nella tabella seguente.
Elemento | Descrizione |
---|---|
job_retry_limit |
Il numero massimo di nuovi tentativi per un cron job non riuscito non deve essere superiore a 5. Se specificato con , App Engine tenta di nuovo il cron job fino al raggiungimento di entrambi i limiti. Se omesso dai parametri, il limite è impostato su 5 per impostazione predefinita.
|
job_age_limit |
Il limite di tempo per i nuovi tentativi di un cron job non riuscito, misurato dalla prima esecuzione del cron job. Il valore è un numero seguito da un'unità di tempo, dove l'unità è s per i secondi, m per i minuti, h per le ore o d per i giorni. Ad esempio, il valore 5d specifica un limite di cinque giorni dopo il primo tentativo di esecuzione del cron job. Se specificato con
job_retry_limit , App Engine tenta di nuovo il cron job fino al raggiungimento di entrambi
i limiti.
|
min_backoff_seconds |
Il numero minimo di secondi di attesa prima di riprovare un cron job dopo l'errore. |
max_backoff_seconds |
Il numero massimo di secondi di attesa prima di riprovare un cron job dopo l'errore. |
max_doublings |
Il numero massimo di volte in cui l'intervallo tra i nuovi tentativi del cron job non riusciti verrà raddoppiato prima che l'aumento diventi costante. La costante è: 2**(max_doublings - 1) * min_backoff .
|
Richieste cron
Intestazioni delle richieste
Le richieste dal servizio Cron conterranno un'intestazione HTTP:
X-Appengine-Cron: true
Questa e altre intestazioni sono impostate internamente da App Engine. Se un client invia queste intestazioni, vengono rimosse dalla richiesta. Fanno eccezione le richieste da parte di amministratori di app legacy che hanno eseguito l'accesso, a cui è consentito impostare l'intestazione a scopo di test.
Indirizzo IP di origine
App Engine emette richieste cron dall'indirizzo IP 0.1.0.2
. Per i cron job creati con versioni precedenti di gcloud (precedenti alla 326.0.0), le richieste cron proverranno da 0.1.0.1
.
Timeout richiesta
Il timeout della richiesta cron dipende dal tipo di scalabilità configurato per l'app:
- Scalabilità automatica
- Timeout della richiesta di 10 minuti.
- Scalabilità di base e scalabilità manuale
- Timeout della richiesta di 24 ore.
Per ulteriori informazioni, consulta Come vengono gestite le istanze.
Limiti
Le applicazioni gratuite possono avere fino a 20 attività pianificate. Le applicazioni a pagamento possono includere fino a 250 attività pianificate.