Riferimento a cron.yaml

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 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 file cron.yaml deve trovarsi nella directory principale dell'applicazione insieme a app.yaml: cron.yaml configura le attività pianificate per l'applicazione PHP 5.

Per ulteriori informazioni sul formato YAML, vedi sul sito web YAML.

Definizioni dei cron job

Elemento Descrizione
description Facoltativo. La descrizione è visibile nella console Google Cloud e nell'interfaccia di amministrazione del server di sviluppo. Circondato da tra virgolette.
retry_parameters Facoltativo. Se il gestore di richieste di un cron job restituisce un codice di stato HTTP che non rientra nell'intervallo 200-299 (inclusi), App Engine considera job non riuscito. Per impostazione predefinita, i job non riusciti non vengono tentati di nuovo. Puoi causare nuovi tentativi per i job non riusciti includendo un blocco dei nuovi parametri in del 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 target viene anteposta al nome host dell'app. it è solitamente il nome di un servizio. Il cron job verrà indirizzato del servizio denominato configurato per il traffico.

Se il nome del servizio specificato per target non è trovata, la richiesta Cron viene indirizzata default o alla versione dell'app installata configurate per ricevere il traffico.Per ulteriori informazioni sul routing, Modalità di routing delle richieste.

Se utilizzi un di tracciamento delle spedizioni, il tuo job potrebbe essere reindirizzato. Ad esempio, dato seguire cron.yaml e dispatch.yaml file, il job verrà eseguito in service2, anche se la sua destinazione è service1:

# 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 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 nella tua applicazione che essere richiamato dal servizio Cron. Per ulteriori informazioni, consulta Protezione degli URL per il cron informazioni.

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 oppure in giorni e mesi specifici.

Intervalli inferiori al giorno

Utilizza un intervallo giornaliero secondario per eseguire un job più volte al giorno programmazione. Puoi definire un intervallo di fine o un intervallo di inizio:

  • 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 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 all'interno 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 lavoro. Una singola ora di inizio nell'intervallo può essere saltata se il job precedente non è stato completato o se è scaduto il tempo.

    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 a 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 un orario specifico 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.
  • In qualsiasi momento deve essere eseguita una sola istanza di un job. 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 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 il metodo la seguente sintassi:

schedule: [TYPE] [INTERVAL_VALUE] [INTERVAL_SCOPE]

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

Intervallo di ora 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 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 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 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
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 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 definisci un'ora di inizio e un intervallo specifici entro il quale per eseguire i job.

      Devi specificare i valori di tempo nel formato 24 ore, HH:MM, dove:

      • HH sono numeri interi da 00 a 23.
      • MM sono numeri interi da 00 a 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. I valori validi per [INTERVAL_VALUE] includono: 1, 2, 3, 4, 6, 8, 12 o 24.

Esempi di intervalli di ora 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
  • Viene eseguito una volta ogni ora dalle 08:00 alle 16:00, ogni giorno:
    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
Intervallo personalizzato
  • [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: 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 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 giorni specifici in cui vuoi che venga eseguito 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 di uno dei seguenti valori lunghi o abbreviati:
      • monday o mon
      • tuesday o tue
      • wednesday o wed
      • thursday o thu
      • friday o fri
      • saturday o sat
      • sunday o sun
      • Utilizza 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, 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 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 di tempo nel formato 24 ore, HH:MM, dove:
      • HH sono numeri interi compresi tra 00 e 23.
      • MM sono numeri interi da 00 a 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 le pianificazioni dei job che utilizzano un intervallo personalizzato:
  • Viene eseguito ogni giorno alle ore 00:00:
    schedule: every day 00:00
  • Viene eseguito 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 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
  • 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
  • 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, ottobre e novembre, viene eseguito una volta alle 09:00:
    schedule: 1st monday of sep,oct,nov 09:00
  • Viene 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

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 il job come non riuscito. Per impostazione predefinita, i job non riusciti non vengono ritentati. Puoi fare in modo che i job non riusciti vengano riprovati includendo 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 (valore predefinito) con un backoff iniziale di 2,5 secondi che raddoppia ogni volta.

cron:
- description: "retry demo"
  url: /retry
  schedule: every 10 mins
  retry_parameters:
    min_backoff_seconds: 2.5
    max_doublings: 5

Sintassi delle ripetizioni 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 superato 5. Se specificato con job_age_limit, App Engine proverà di nuovo il cron job finché non vengono raggiunti entrambi i limiti. Se omesso dalla sezione il limite è impostato su 5 per impostazione predefinita.
job_age_limit Il limite di tempo per il nuovo tentativo di un cron job non riuscito, misurato dal momento in cui è stata eseguita la prima esecuzione del cron job. 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 tenta di nuovo il cron job finché non vengono soddisfatti entrambi i limiti raggiunto.
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 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.

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 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.

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 ulteriori informazioni, 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.