Pianificazione dei job con cron.yaml

Il servizio Cron di App Engine consente di configurare regolarmente attività eseguite in orari specifici o a intervalli regolari. Queste attività vengono comunemente noti come cron job. Questi cron job vengono attivati automaticamente il servizio cron di App Engine. Ad esempio, potresti utilizzarlo per inviare invia un'email con il report ogni giorno, per aggiornare alcuni dati memorizzati nella cache ogni 10 o aggiornare alcune informazioni di riepilogo una volta all'ora.

Un cron job esegue una richiesta HTTP GET pianificata all'endpoint specificato nella nella stessa app in cui è configurato il cron job. Il gestore per quell'endpoint esegue la logica quando viene richiamata.

Impossibile utilizzare il servizio Cron di App Engine per chiamare endpoint web al di fuori dell'app host di App Engine. Non può essere utilizzato per chiamare App Engine endpoint di altre app oltre all'app host.

Le richieste di cron job soggetto agli stessi limiti degli altri HTTP richieste di Google. Le applicazioni gratuite possono avere fino a 20 attività pianificate. Le applicazioni a pagamento possono avere fino a 250 attività pianificate.

Per eseguire il deployment o aggiornare le pianificazioni, il tuo account richiede uno dei seguenti requisiti Ruoli di Identity and Access Management:

Puoi impostare l'autorizzazione nella Pagina IAM nella console Google Cloud.

Informazioni sul file di configurazione cron

Per tutti i runtime tranne Java, un file cron.yaml in la directory root dell'applicazione (insieme a app.yaml) configura le attività pianificate per la tua app.

Per Java, un file cron.yaml nel file WEB-INF directory della tua applicazione (insieme a app.yaml) configura le attività pianificate per la tua app.

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

Il file cron.yaml utilizza l'elemento Sintassi YAML ed è composto da definizioni per ciascuno dei tuoi cron job. Un job la definizione deve avere url e schedule. Puoi anche specificare description, timezone, target e retry_parameters:

url
Obbligatorio. L'URL nella tua app a cui il servizio Cron deve inviare il job richieste.
schedule
Obbligatorio. Definisce la pianificazione di quando deve essere eseguito il job; consulta la sintassi riportata di seguito.
description
Facoltativa. Descrive il cron job, che è visibile dall'interno nella console Google Cloud.
timezone
Facoltativa. Nome del fuso orario, o "zoneinfo" che vuoi utilizzare per la pianificazione del job. In caso contrario specifica un fuso orario, la pianificazione utilizza UTC, che è noto anche come GMT.
target
Facoltativa. Il nome di un servizio specifico nella tua app. Quando target è specificato, il servizio Cron ha come target richiesta di job a quel servizio nella tua app. Le richieste di job vengono indirizzate nel servizio specificato che sono configurate per il traffico. Scopri come vengono instradate le richieste.

Considerazioni importanti per target:

  • Se disponi di suddivisione del traffico abilitata, le tue richieste di job non verranno suddivise tra le versioni che hai configurato:
      .
    • Suddivisione degli indirizzi IP: le richieste di job dal servizio Cron vengono sempre inviate dallo stesso indirizzo IP e, di conseguenza, vengono indirizzate allo stesso la versione precedente ogni volta.
    • Suddivisione dei cookie: le richieste di job non includono un cookie con il valore e, di conseguenza, non vengono indirizzati ad altre versioni.
  • Se utilizzi un di invio, i job possono essere reindirizzati quando viene visualizzato lo stesso URL. configurato in dispatch.yaml. Ad esempio, se L'URL /tasks/hello_service2 è definito in entrambi i campi persone che segui cron.yaml e dispatch.yaml file, le richieste di job vengono inviate a service2, anche se target: service1 è specificato:

    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
retry_parameters
Facoltativa. Specifica di eseguire nuovamente i job non riusciti; consulta la sintassi qui sotto.

Definizione del cron job schedule

I cron job vengono pianificati a intervalli ricorrenti e vengono specificati utilizzando semplice in stile 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 programmazione. Puoi definire un intervallo di fine o un'ora di inizio intervallo:

  • Intervallo di fine: definisce il periodo di tempo che intercorre tra l'"ora di fine". di un job e all'avvio del job successivo, dove l'"ora di fine" è in cui il job viene completato volte di Google. Il servizio Cron esegue i job in questo tipo di intervallo nelle 24 ore giorno, a partire da 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, con un intervallo di 5 minuti. Se un'istanza di un job in esecuzione in questa pianificazione, il completamento alle 02:01, poi il job successivo attende 5 minuto e ricomincia alle 02:06.

  • Intervallo di inizio: definisce un intervallo di tempo regolare per il cron. per avviare ciascun job. A differenza del di fine, l'intervallo di inizio esegue ogni job indipendentemente quando il job precedente viene completato o scade. Puoi impostare un intervallo di tempo compreso tra che vuoi venga eseguito dal job o eseguire job 24 ore al giorno, a partire da 00:00.

    Poiché l'ora di inizio di un job è rigorosa, se viene eseguita un'istanza di un job maggiore dell'intervallo di tempo definito, il servizio Cron può saltare un lavoro. È possibile saltare una singola ora di inizio nell'intervallo se un job precedente non è stato completato volte di Google.

    Esempio: per every 5 minutes from 10:00 to 14:00 pianificazione, l'esecuzione del primo job inizia alle ore 10:00 e poi ogni 5 minuti. Se il primo job viene eseguito per 7 minuti, il job 10:05 viene ignorato e, di conseguenza, il servizio Cron non esegue un'altra istanza di questo job fino al giorno 10:10.

Intervallo personalizzato

Puoi utilizzare un intervallo personalizzato per definire una pianificazione in cui job può essere eseguito una volta al giorno in uno o più giorni selezionati e in uno o più mesi. I job eseguiti in base a una pianificazione personalizzata vengono eseguiti tutto l'anno, solo alla nei giorni e nei mesi selezionati.

Esempio: per la pianificazione 1,2,3 of month 07:00, il job viene eseguito una volta alle ore 07:00 nei primi tre giorni di ogni mese.

Considerazioni importanti per schedule:

  • Devi decidere se utilizzare un intervallo secondario o un intervallo intervallo di tempo. Non puoi combinare e utilizzare elementi dei vari intervalli di testo. 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 alla volta. Il servizio Cron progettato per offrire "almeno una volta" la distribuzione dei dati; cioè se un job è pianificato, App Engine invia la richiesta di job almeno una volta. In alcuni rari è possibile che più istanze dello stesso job vengano richiesto, pertanto, il gestore delle richieste dovrebbe idempotente, e il codice dovrebbe garantire che non ci siano effetti collaterali dannosi .

Formattazione di schedule

Per specificare quando viene eseguito il job, devi definire l'elemento schedule utilizzando il metodo la seguente sintassi:

schedule: [TYPE] [INTERVAL_VALUE] [INTERVAL_SCOPE]

Scegli un tipo di intervallo per definire l'elemento schedule:

Intervallo di tempo di fine
  • [TYPE]: gli intervalli giornalieri devono includere every .

    Esempio: schedule: every 12 hours

  • [INTERVAL_VALUE]: un valore intero e l'unità corrispondente di nel tempo. Valori validi per l'unità di tempo:
    • minutes o mins
    • hours
  • [INTERVAL_SCOPE]: non applicabile. Per impostare un'ora di inizio specifica all'interno del quale vuoi eseguire i job, consulta la sintassi Intervallo di inizio oppure Intervallo personalizzato.
Esempi di intervalli di tempo di fine
Utilizza i seguenti esempi per capire come definire il job programmazioni che utilizzano un intervallo di tempo di fine:
  • Viene eseguito ogni giorno alle 00:00 e attende 5 minuti tra le due per ogni job. Al termine di ogni job, il servizio Cron attende 5 minuti prima di eseguire il job successivo:
    schedule: every 5 minutes
  • Inizia esecuzione ogni giorno alle 00:00 e attende 30 minuti tra per ogni job. Al termine di ogni job, il servizio Cron attende 30 minuti prima di eseguire il job successivo:
    schedule: every 30 mins
di Gemini Advanced.
.
Intervallo di inizio
  • [TYPE]: gli intervalli giornalieri devono includere every .

    Esempio: schedule: every 12 hours

  • [INTERVAL_VALUE]: un valore intero e l'unità corrispondente di nel tempo. Valori validi per l'unità di tempo:
    • minutes o mins
    • hours
  • [INTERVAL_SCOPE] Specifica una clausola che corrisponde alla [INTERVAL_VALUE]. Puoi definire un intervallo di tempo personalizzato o utilizzare la funzione Opzione synchronized.
    • Includi la clausola from [HH:MM] to [HH:MM] per definisci un'ora di inizio e un intervallo specifici entro il quale per eseguire i job.

      Devi specificare i valori dell'ora nel formato 24 ore, HH:MM, dove:

      • HH sono numeri interi compresi tra 00 e 23.
      • MM sono numeri interi compresi tra 00 e 59.
    • Usa synchronized per specificare un intervallo di 24 ore (from 00:00 to 23:59) in modo uniforme diviso per il valore [INTERVAL_VALUE].

      Importante: [INTERVAL_VALUE] deve dividere 24 in un intero, altrimenti si verifica un errore. Valori validi per [INTERVAL_VALUE] include: 1, 2, 3, 4, 6 8, 12 o 24.

Esempi di intervalli di inizio
Utilizza i seguenti esempi per capire come definire il job programmazioni che utilizzano un intervallo di inizio:
  • In esecuzione ogni 5 minuti dalle 10:00 alle 14:00, tutti i giorni:
    schedule: every 5 minutes from 10:00 to 14:00
  • Accede una volta ogni ora dalle 08:00 alle 16:00, tutti i giorni:
    schedule: every 1 hours from 08:00 to 16:00
  • Eseguito una volta ogni due ore, tutti i giorni a partire dalle ore 00:00:
    schedule: every 2 hours synchronized
di Gemini Advanced.
.
Intervallo personalizzato
  • [TYPE]: gli intervalli personalizzati possono includere every per definire un intervallo ripetitivo oppure puoi definire un intervallo elenco di giorni di un mese:
    • Per definire un intervallo ripetitivo, puoi utilizzare il metodo Prefisso every.

      Esempi:

      schedule: every day 00:00
      schedule: every monday 09:00

    • Per definire giorni specifici, devi utilizzare i numeri ordinali. Valido valori vanno dal primo giorno di un mese, fino al valore massimo numero di giorni di quel mese, ad esempio:
      • 1st o first
      • 2nd o second
      • 3rd o third
      • E fino a: 31st o thirtyfirst

      Esempio:

      schedule: 1st,3rd tuesday
      schedule: 2nd,third wednesday of month 09:00

  • [INTERVAL_VALUE]: gli intervalli personalizzati includono un elenco dei i giorni specifici in cui vuoi eseguire il job. L'elenco deve essere definiti in un elenco separato da virgole e possono includere uno dei seguenti i 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 elementi valori abbreviati:
      • monday o mon
      • tuesday o tue
      • wednesday o wed
      • thursday o thu
      • friday o fri
      • saturday o sat
      • sunday o sun
      • 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

  • [INTERVAL_SCOPE]: specifica una clausola che corrisponde alla specificato [INTERVAL_VALUE]. Gli intervalli personalizzati possono includere of [MONTH], che specifica un solo mese in una anno o un elenco di più mesi separati da virgole. Devi inoltre definisci un'ora specifica in cui vuoi eseguire il job, ad esempio: of [MONTH] [HH:MM].

    Per impostazione predefinita, se la clausola of è esclusa, il parametro personalizzato viene eseguito ogni mese.

    • [MONTH]: devi specificare i mesi in un elenco separato da virgole e può includere una combinazione dei seguenti valori lunghi o abbreviati:
      • january o jan
      • february o feb
      • march o mar
      • april o apr
      • may
      • june o jun
      • july o jul
      • august o aug
      • september o sep
      • october o oct
      • november o nov
      • december o dec
      • 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 tra 00 e 23.
      • MM sono numeri interi compresi tra 00 e 59.
    • Esempio:

      schedule: 1st monday of sep,oct,nov 09:00
      schedule: 1 of jan,april,july,oct 00:00

Esempi di intervalli personalizzati
Utilizza i seguenti esempi per capire come definire il job le pianificazioni 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
  • Viene eseguito sei volte a maggio. Durante le prime due settimane, esegue una 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 eseguita una 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 eseguita una volta alle 04:00:
    schedule: 1st,third monday of month 04:00
  • Viene eseguito tre volte all'anno. Il primo lunedì di settembre, Da 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 e aprile nei mesi di luglio e ottobre, viene eseguita una sola volta alle 00:00:
    schedule: 1 of jan,april,july,oct 00:00

Specificare i nuovi tentativi

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. Di per impostazione predefinita, i job non riusciti non vengono tentati di nuovo. Puoi causare un nuovo tentativo di job non riusciti incluso un blocco retry_parameters nel file di configurazione.

Ecco un file cron.yaml di esempio contenente un singolo cron job configurato riprova fino a cinque volte con un backoff iniziale di 2,5 secondi raddoppia ogni volta.

cron:
- description: "retry demo"
  url: /retry
  schedule: every 10 mins
  retry_parameters:
    job_retry_limit: 5
    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 Un numero intero che rappresenta il numero massimo di nuovi tentativi per un cron job non riuscito. Il valore minimo è 0, mentre il massimo è 5. Se specifichi anche job_age_limit, App Engine proverà nuovamente a utilizzare il cron job fino a raggiungere entrambi i limiti. Il valore predefinito per job_retry_limit è 0.
job_age_limit Il limite di tempo per il nuovo tentativo di un cron job non riuscito, misurato dal momento in cui viene eseguita per la prima volta il cron job. Il valore è un numero seguito da un'unità di volta, dove l'unità è sper i secondi, mper minuti, h per ore o d per giorni. Per esempio, il valore 5d specifica un limite di cinque giorni dopo il primo tentativo di esecuzione del cron job. Se specifichi anche job_retry_limit, App Engine tenta di nuovo il cron job finché non raggiunge entrambi i limiti.
min_backoff_seconds Numero minimo di secondi di attesa prima di riprovare un cron job dopo non riesce.
max_backoff_seconds Il numero massimo di secondi che devono trascorrere prima di riprovare un cron job dopo non riesce.
max_doublings Il numero massimo di volte in cui l'intervallo tra un cron job non riuscito il numero di nuovi tentativi sarà raddoppiato prima che l'aumento diventi costante. La costante è: 2**(max_doublings - 1) * min_backoff.

Convalida delle richieste cron

Ti consigliamo di verificare che le richieste agli URL cron provengano da App Engine e non da un'altra origine. Puoi farlo convalidando Intestazione HTTP e indirizzo IP di origine della richiesta:

  • Le richieste da parte del servizio Cron conterranno la seguente intestazione HTTP:

    X-Appengine-Cron: true
    

    Questa e altre intestazioni sono impostati internamente da App Engine. Se un client invia queste intestazioni, vengono rimosse dalla richiesta.

  • App Engine emette richieste cron dall'indirizzo IP 0.1.0.2. Per i cron job creati con versioni precedenti di gcloud (prima del 326.0.0), le richieste cron provenienti da 0.1.0.1.

Per i runtime Java, in Jetty o Tomcat, puoi eseguire questa convalida in una filtro.

Timeout richiesta

Il timeout della richiesta cron è 60 minuti.

Per ulteriori informazioni sui timeout delle richieste per ambiente e sulla scalabilità consulta Scegliere un ambiente App Engine.

Caricamento di cron job

Per caricare i tuoi cron job, devi specificare cron.yaml come parametro al seguente comando gcloud:

gcloud app deploy cron.yaml

Eliminazione di cron job

Per eliminare tutti i cron job, modifica il file cron.yaml in modo che contenga solo:

cron:

Supporto cron nella console Google Cloud

Puoi controllare i cron job pianificati nella console Google Cloud Pagina dei job Cron.

Puoi anche visitare la pagina Log per vedere quando sono stati aggiunti o rimossi i cron job.