Utilizza il file cron.yaml
per definire le attività pianificate per la tua applicazione.
Per scoprire di più sulla pianificazione delle attività, inclusa la modalità di test, di implementazione o di eliminazione dei cron job, consulta Pianificare le attività con Cron.
Esempio
Di seguito è riportato un esempio di file cron.yaml
:
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 insieme a app.yaml
:
cron.yaml
configura le attività pianificate per l'applicazione Java 8.
Definizioni dei cron job
Elemento | Descrizione |
---|---|
description |
Facoltativo. La descrizione è visibile nella console Google Cloud e nell'interfaccia di amministrazione del server di sviluppo. |
retry_parameters |
Facoltativo. Se il gestore delle richieste di un job cron restituisce un codice di stato HTTP
non compreso nell'intervallo 200-299 (incluso), App Engine considera il
job non riuscito. Per impostazione predefinita, i job non riusciti non vengono riprovati. Puoi
eseguire nuovamente i job non riusciti includendo un blocco retry-parameters nel
file di configurazione.
Per ulteriori informazioni, consulta la sezione Ripetizioni di Cron. |
schedule |
Obbligatorio. Definisce la pianificazione dell'esecuzione del cron job. Consulta la sintassi riportata di seguito. |
target |
La stringa
Se il nome del servizio specificato per |
timezone |
timezone deve essere il nome di un fuso orario
zoneinfo standard. Se non specifichi un fuso orario,
i job vengono eseguiti
in UTC (noto anche come GMT).
|
url |
Obbligatorio.
Il campo url è solo un URL nella tua applicazione. Se l'elemento
url contiene i caratteri XML speciali
& , < , > ,
' o " , devi applicare loro un'escaping.
|
Definizione del cron job schedule
I cron job vengono pianificati a intervalli ricorrenti e sono specificati utilizzando un semplice formato simile all'inglese. Puoi definire una pianificazione in modo che il job venga eseguito più volte al giorno oppure in giorni e mesi specifici.
- Intervalli inferiori al giorno
Utilizza un intervallo inferiore a un giorno per eseguire un job più volte al giorno in base a una programmazione 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'inizio del job successivo, dove l'"ora di fine" è il tempo in cui il job viene completato o times out . Il servizio Cron esegue i job in questo tipo di intervallo per l'intera giornata, a partire dalle
00:00
, e attende la durata specificata tra ogni job.Esempio: per la pianificazione
every 5 minutes
, il job viene eseguito quotidianamente con un intervallo di 5 minuti. Se un'istanza di un job in esecuzione su 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 per l'avvio di ogni job da parte del servizio Cron. A differenza dell'intervallo di tempo di fine, l'intervallo di tempo di inizio esegue ogni job indipendentemente dal completamento o dal timeout del job precedente. Puoi impostare un intervallo di tempo entro il quale eseguire il job o eseguire i job 24 ore al giorno, a partire da
00:00
.Poiché l'ora di inizio di un job è rigorosa, se un'istanza di un job viene eseguita più a lungo dell'intervallo di tempo definito, il servizio Cron può saltare un job. Un'ora di inizio singola nell'intervallo può essere saltata se il job precedente non è stato completato o se il tempo scade.
Esempio: per la pianificazione
every 5 minutes from 10:00 to 14:00
, il primo job inizia a essere eseguito alle ore10:00
e poi 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 a10: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 che vengono 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 giornaliero 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</schedule>
. - In qualsiasi momento deve essere eseguita una sola istanza di un job. Il servizio Cron è progettato per fornire la consegna "almeno una volta", ovvero se un job è pianificato, App Engine invia la richiesta di job almeno una volta. In alcune rare circostanze è possibile che vengano richieste più istanze dello stesso job, pertanto il gestore delle richieste deve essere idempotente e il codice deve garantire che non si verifichino effetti collaterali dannosi in questo caso.
Formattazione del schedule
Per specificare quando viene eseguito il job, devi definire l'elemento schedule
utilizzando la seguente sintassi:
<schedule>[TYPE] [INTERVAL_VALUE] [INTERVAL_SCOPE]</schedule>
Scegli un tipo di intervallo per definire l'elemento schedule
:
- [TYPE]: gli intervalli giornalieri devono includere il prefisso
every
.Esempio:
<schedule>every 12 hours</schedule>
- [INTERVAL_VALUE]: un valore intero e l'unità di misura 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 che vengano eseguiti i job, consulta la sintassi per l'intervallo di inizio o l'intervallo personalizzato.
- Esempi di intervallo di tempo di fine
- Utilizza i seguenti esempi per capire come definire le pianificazioni dei job che utilizzano un intervallo di ora di fine:
- Inizia a essere eseguito ogni giorno alle 00:00 e attende 5 minuti tra ciascun job. Al termine di ogni job, il servizio Cron attende 5 minuti
prima di eseguire il job successivo:
<schedule>every 5 minutes</schedule>
- Inizia a funzionare ogni giorno alle 00:00 e attende 30 minuti tra ogni job. Al termine di ogni job, il servizio Cron attende 30 minuti
prima di eseguire il job successivo:
<schedule>every 30 mins</schedule>
- Inizia a essere eseguito ogni giorno alle 00:00 e attende 5 minuti tra ciascun job. 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</schedule>
- [INTERVAL_VALUE]: un valore intero e l'unità di misura corrispondente. Valori validi per l'unità di tempo:
minutes
omins
hours
- [INTERVAL_SCOPE] Specifica una clausola corrispondente 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 orario di inizio e un intervallo specifici in cui eseguire i job.Devi specificare i valori di tempo nel formato 24 ore,
HH:MM
, dove:HH
sono numeri interi da00
a23
.MM
sono numeri interi da00
a59
.
- Utilizza
synchronized
per specificare un intervallo di tempo (from 00:00 to 23:59
) di 24 ore diviso in modo uniforme dal 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 ora di inizio
- Utilizza i seguenti esempi per capire come definire le pianificazioni dei job che utilizzano un intervallo di ora di inizio:
- Viene eseguito ogni 5 minuti dalle 10:00 alle 14:00, ogni giorno:
<schedule>every 5 minutes from 10:00 to 14:00</schedule>
- Viene eseguito una volta ogni ora dalle 08:00 alle 16:00, ogni giorno:
<schedule>every 1 hours from 08:00 to 16:00</schedule>
- Viene eseguito una volta ogni due ore, ogni giorno a partire dalle ore 00:00:
<schedule>every 2 hours synchronized</schedule>
- Viene eseguito ogni 5 minuti dalle 10:00 alle 14:00, ogni giorno:
- [TYPE]: gli intervalli personalizzati possono includere il prefisso
every
per definire un intervallo ripetitivo oppure puoi definire un elenco specifico di giorni in un mese:- Per definire un intervallo ripetitivo, puoi utilizzare il prefisso
every
.Esempi:
<schedule>every day 00:00</schedule> <schedule>every monday 09:00</schedule>
- 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> <schedule>2nd,third wednesday of month 09:00</schedule>
- Per definire un intervallo ripetitivo, puoi utilizzare il prefisso
- [INTERVAL_VALUE]: gli intervalli personalizzati includono un elenco dei
giorni specifici in cui vuoi che venga eseguito il job. L'elenco deve essere definito in un elenco separato da virgola 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 di uno dei seguenti valori lunghi o abbreviati:
monday
omon
tuesday
otue
wednesday
owed
thursday
othu
friday
ofri
saturday
osat
sunday
osun
- Utilizza
day
per specificare tutti i giorni della settimana.
Esempi:
<schedule>2nd monday,thu</schedule> <schedule>1,8,15,22 of month 09:00</schedule> <schedule>1st mon,wednesday,thu of sep,oct,nov 17:00</schedule>
- Il valore intero del giorno del mese fino a un massimo di 31 giorni, ad esempio:
- [INTERVAL_SCOPE]: specifica una clausola corrispondente al valore [INTERVAL_VALUE] specificato. Gli intervalli personalizzati possono includere la clausola
of [MONTH]
, che specifica un singolo mese in un anno, o un elenco separato da virgole di più mesi. Devi anche definire un'ora specifica per l'esecuzione del job, ad esempio:of [MONTH] [HH:MM]
.Per impostazione predefinita, se la clausola
of
è esclusa, l'intervallo personalizzato viene eseguito ogni mese.- [MONTH]: 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 di tempo nel formato 24 ore,
HH:MM
, dove:HH
sono numeri interi da00
a23
.MM
sono numeri interi da00
a59
.
Esempio:
<schedule>1st monday of sep,oct,nov 09:00</schedule> <schedule>1 of jan,april,july,oct 00:00</schedule>
- [MONTH]: 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:
- Viene eseguito ogni giorno alle ore 00:00:
<schedule>every day 00:00</schedule>
- Viene eseguito ogni lunedì alle 09:00:
<schedule>every monday 09:00</schedule>
- Viene eseguito una volta il secondo mercoledì di marzo alle 17:00:
<schedule>2nd wednesday of march 17:00</schedule>
- Viene pubblicato sei volte a maggio. Durante le prime due settimane, viene pubblicato una volta ogni lunedì, mercoledì e venerdì alle ore 10:00:
<schedule>1st,second mon,wed,fri of may 10:00</schedule>
- Viene eseguito una volta alla settimana. Ogni sette giorni a partire dal primo giorno di ogni mese, viene eseguito una volta alle 09:00:
<schedule>1,8,15,22 of month 09:00</schedule>
- Viene eseguito ogni due settimane. Il primo e il terzo lunedì di ogni mese,
viene eseguito una volta alle 04:00:
<schedule>1st,third monday of month 04:00</schedule>
- Viene eseguita tre volte all'anno. Il primo lunedì di settembre,
ottobre e novembre, viene eseguito una volta alle 09:00:
<schedule>1st monday of sep,oct,nov 09:00</schedule>
- Viene eseguita una volta ogni trimestre. Il primo giorno di gennaio, aprile,
luglio e ottobre viene eseguito una volta alle 00:00:
<schedule>1 of jan,april,july,oct 00:00</schedule>
- Viene eseguito ogni giorno alle ore 00:00:
Nuovi tentativi cron
Se il gestore delle richieste di un job cron restituisce un codice di stato non compreso tra 200 e 299 (inclusi), App Engine considera il job non riuscito. Per impostazione predefinita,
non viene eseguito alcun nuovo tentativo per i job non riusciti. Puoi fare in modo che i job non riusciti vengano riprovati includendo un blocco
nel file di configurazione.retry_parameters
cron.xml
di esempio che contiene un singolo job cron configurato per ritentare fino a cinque volte (il valore predefinito) con un backoff iniziale di 2,5 secondi che raddoppia ogni volta.
<cronentries>
<cron>
<url>/retry</url>
<description>Retry on jsdk</description>
<schedule>every 10 minutes</schedule>
<retry-parameters>
<min-backoff-seconds>2.5</min-backoff-seconds>
<max-doublings>5</max-doublings>
</retry-parameters>
</cron>
</cronentries>
Sintassi delle ripetizioni cron
I parametri di ripetizione sono descritti nella tabella seguente.
Elemento | Descrizione |
---|---|
job_retry_limit |
Il numero massimo di nuovi tentativi per un cron job non riuscito non deve superare
5. Se specificato con , App Engine riprova
il cron job fino al raggiungimento di entrambi i limiti. Se viene omesso dai parametri, il limite viene impostato su 5 per impostazione predefinita.
|
job_age_limit |
Il limite di tempo per ritentare un job cron non riuscito, misurato dal primo
avvio del job cron. Il valore è un numero seguito da un'unità di misura del 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 job cron. Se specificato con
job_retry_limit , App Engine riprova il cron job fino a quando non vengono raggiunti entrambi i limiti.
|
min_backoff_seconds |
Il numero minimo di secondi da attendere prima di riprovare un job cron dopo che non è riuscito. |
max_backoff_seconds |
Il numero massimo di secondi di attesa prima di riprovare un job cron dopo che non è riuscito. |
max_doublings |
Il numero massimo di volte in cui l'intervallo tra i tentativi di job cron 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 del servizio Cron conterranno un'intestazione HTTP:
X-Appengine-Cron: true
Questo e altri intestazioni vengono impostati internamente da App Engine. Se un client invia queste intestazioni, vengono rimosse dalla richiesta. Fanno eccezione le richieste degli amministratori di app precedenti che hanno eseguito l'accesso e che sono autorizzati a impostare l'intestazione a scopo di test.
Indirizzo IP di origine
App Engine invia richieste Cron dall'indirizzo IP0.1.0.2
. Per i cron job creati con versioni precedenti di gcloud (precedente alla 326.0.0), le richieste di Cron provengono da 0.1.0.1
.
Timeout richiesta
Il timeout della richiesta cron dipende dal tipo di scalabilità configurato per la tua app:
- Scalabilità automatica
- Timeout della richiesta di 10 minuti.
- Scalabilità di base e manuale
- Timeout della richiesta di 24 ore.
Per saperne di più, consulta Come vengono gestite le istanze.
Limiti
Le applicazioni gratuite possono avere fino a 20 attività pianificate. Le applicazioni a pagamento possono avere fino a 250 attività pianificate.
Supporto di cron nel server di sviluppo
Il server di sviluppo non esegue automaticamente i cron job. Puoi utilizzare l'interfaccia di cron o delle attività pianificate del tuo computer locale per attivare gli URL dei tuoi job con curl o uno strumento simile.
Eseguire il deployment dei cron job
Puoi utilizzare l'interfaccia alla gcloud CLI per eseguire il deployment dei job cron in App Engine.
Per eseguire il deployment dei job cron specificati nel file di configurazione cron.yaml
,
esegui il seguente comando:
gcloud
gcloud app deploy cron.yaml
Maven
mvn appengine:deployCron cron.yaml
Gradle
gradle appengineDeployCron cron.yaml
IDE
Se utilizzi IntelliJ o Eclipse, seleziona i singoli file di configurazione da eseguire il deployment utilizzando il modulo di deployment.
Eliminazione di tutti i cron job
Per eliminare tutti i cron job:
Modifica i contenuti del file
cron.yaml
in modo che:cron:
Esegui il deployment del file
cron.yaml
in App Engine.
Supporto di Cron nella console Google Cloud
La pagina CodeQueues della console Google Cloud contiene una scheda che mostra le attività che eseguono i cron job.
Puoi anche visitare la pagina Log per vedere quando sono stati aggiunti o rimossi i job cron.