Avviso: nei prossimi mesi, stiamo riorganizzando il sito della documentazione di App Engine per semplificare la ricerca di contenuti e l'allineamento con il resto dei prodotti Google Cloud. Saranno disponibili gli stessi contenuti, ma ora la navigazione corrisponderà al resto dei prodotti Cloud. Se hai feedback o domande durante la navigazione nel sito, fai clic su Invia feedback.

Poiché la versione 5.5 di PHP non è più supportata dalla community, consigliamo vivamente alle nuove app di utilizzare il runtime PHP 7 e versioni successive.

Riferimento cron.yaml

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

Utilizza il file cron.yaml per definire le attività pianificate per la tua applicazione.

Per ulteriori informazioni sulla pianificazione delle attività, incluso come testare, eseguire il deployment o eliminare i job Cron, consulta la sezione 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

Syntax

Il file cron.yaml deve risiedere nella directory principale dell'applicazione insieme a app.yaml: cron.yaml configura le attività pianificate per l'applicazione PHP 5.

Per scoprire di più sul formato YAML, consulta il sito web YAML.

Definizioni dei cron job

Elemento Descrizione
description Facoltativi. 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 Facoltativi. Se un gestore di richieste cron job restituisce un codice di stato HTTP che non rientra nell'intervallo di 200-299 (inclusi) di App Engine considera che il job non sia riuscito. Per impostazione predefinita, non viene eseguito un nuovo tentativo dei job non riusciti. Puoi causare nuovi tentativi per i job non riusciti includendo un blocco nuovi parametri nel file di configurazione.

Per ulteriori informazioni, consulta la sezione Riprovazioni di Chrome.

schedule Obbligatorio. Definisce la pianificazione dell'esecuzione del cron job. Vedi la sintassi di seguito.
target

La stringa target è anteposta al nome host dell'app. Di solito è il nome di un servizio. Il cron job verrà instradato alla versione del servizio denominato configurato per il traffico.

Se il nome del servizio specificato per target non viene trovato, la richiesta Cron viene instradata al servizio default o alla versione dell'app configurata per ricevere il traffico.Per ulteriori informazioni sul routing, consulta Modalità di routing delle richieste.

Se utilizzi un file di invio, il tuo job potrebbe essere reindirizzato. Ad esempio, dati i seguenti file cron.yaml e dispatch.yaml, il job verrà eseguito in service2, anche se il target è 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 standard di zoneinfo. Se non specifichi un fuso orario, la programmazione 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 Sicurezza degli URL per Cron.

Definizione del cron job schedule

I job cron vengono pianificati a intervalli ricorrenti e vengono specificati utilizzando un formato semplice 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 subgiornaliero per eseguire un job più volte al giorno secondo una pianificazione ripetitiva. Puoi definire un intervallo di ora di fine o un intervallo di ora di inizio:

  • Intervallo di fine: definisce il tempo tra l'ora di fine di un job e l'inizio del job successivo, in cui l'ora di fine corrisponde all'ora in cui viene completato il job o al timeout. Il servizio Cron esegue i job in questo tipo di intervallo nell'arco di 24 ore, a partire dal giorno 00:00, e attende il periodo di tempo specificato tra ogni job.

    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 tempo di avvio: definisce un intervallo di tempo regolare in cui il servizio Cron avvia un job. A differenza dell'intervallo dell'ora di fine, l'intervallo orario di inizio viene eseguito per ogni job indipendentemente dal completamento o dal timeout del job precedente. Puoi impostare un intervallo di tempo entro il quale vuoi eseguire il job oppure eseguire i 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 di tempo più lungo dell'intervallo di tempo definito, il servizio Cron può saltare un job. Un singolo tempo di inizio nell'intervallo può essere ignorato se il job precedente non è stato completato o i timeout.

    Esempio: per la pianificazione every 5 minutes from 10:00 to 14:00, il primo job inizia a essere eseguito a 10:00, quindi 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 il tuo job può essere eseguito una volta al giorno in uno o più giorni selezionati e in uno o più mesi selezionati. I job eseguiti con una pianificazione personalizzata vengono eseguiti tutto l'anno, solo nella data e nei giorni 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 giornaliero secondario o un intervallo personalizzato. Non puoi utilizzare vari tipi di intervalli. 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 fornire almeno una volta la distribuzione; in altre parole, se un job è pianificato, App Engine invia la richiesta del job almeno una volta. In alcune rare circostanze, è possibile che più istanze dello stesso job vengano richieste, pertanto il gestore delle richieste dovrebbe essere idempotente e il codice dovrebbe garantire che non si verifichino effetti collaterali dannosi in caso di questo problema.

Formattazione di schedule

Per specificare quando il job viene eseguito, 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:

Intervallo ora di fine
  • [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 o mins
    • hours
  • [INTERVAL_SCOPE]: Non applicabile. Per impostare un'ora di inizio o un intervallo entro il quale vuoi eseguire i job, consulta la sintassi per l'intervallo di inizio o l'intervallo personalizzato.
Esempi di intervallo di fine
Utilizza i seguenti esempi per comprendere meglio come definire 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 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
  • L'esecuzione inizia 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
Intervallo ora di inizio
  • [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 o mins
    • hours
  • [INTERVAL_SCOPE] Specifica una clausola che corrisponde al valore di [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 i quali vuoi eseguire i job.

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

      • HH sono numeri interi da 00 a 23.
      • MM sono numeri interi da 00 a 59.
    • 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 o 24.

Esempi di intervalli di tempo di inizio
Utilizza i seguenti esempi per comprendere meglio come definire pianificazioni di job che utilizzano un intervallo di inizio:
  • Eseguito ogni 5 minuti dalle 10:00 alle 14:00, tutti i giorni:
    schedule: every 5 minutes from 10:00 to 14:00
  • Eseguito 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, ogni giorno a partire da 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 del 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 di 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 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 a [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 inoltre 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.

    • [MONTH]: Devi specificare i mesi in un elenco separato da virgole e 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 da 00 a 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 pianificazioni di job che utilizzano un intervallo personalizzato:
  • Eseguito ogni giorno alle 00:00:
    schedule: every day 00:00
  • Eseguito ogni lunedì alle 09:00:
    schedule: every monday 09:00
  • Eseguito una volta il secondo mercoledì di marzo alle 17:00:
    schedule: 2nd wednesday of march 17:00
  • Eseguito sei volte a maggio. Nelle prime due settimane, viene eseguito una volta ogni lunedì, mercoledì e venerdì alle ore 10:00:
    schedule: 1st,second mon,wed,fri of may 10:00
  • 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
  • Eseguito a settimane alterne. Il primo e il terzo lunedì di ogni mese, vengono eseguiti una volta alle 04:00:
    schedule: 1st,third monday of month 04:00
  • 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
  • Eseguito 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

Nuovi tentativi cron.

Se un gestore di richieste cron job restituisce un codice di stato non compreso nell'intervallo 200-299 (inclusi) di App Engine considera che il job non sia riuscito. Per impostazione predefinita, non viene eseguito un nuovo tentativo dei job non riusciti. Puoi causare nuovi tentativi dei job non riusciti includendo un blocco retry_parameters nel file di configurazione.

Di seguito è riportato un file cron.yaml di esempio contenente un singolo cron job configurato per riprovare fino a cinque volte (l'impostazione predefinita) 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 dei tentativi 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 è maggiore di 5. Se specificato con job_age_limit, App Engine prova nuovamente il cron job finché non vengono raggiunti entrambi i limiti. Se omesso dai parametri, il limite è impostato su 5 per impostazione predefinita.
job_age_limit Il limite di tempo per riprovare 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 secondi, m per minuti, h per ore o d per 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 il cron job finché non vengono raggiunti entrambi i limiti.
min_backoff_seconds Il numero minimo di secondi da attendere prima di riprovare un cron job dopo che non è stato eseguito.
max_backoff_seconds Il numero massimo di secondi da attendere prima di riprovare un cron job dopo l'esecuzione.
max_doublings Il numero massimo di volte in cui l'intervallo tra i nuovi tentativi di cron job non riusciti sarà raddoppiato prima che l'aumento diventi costante. La costante è: 2**(max_doublings - 1) * min_backoff.

Richieste cron

Intestazioni della richiesta

Le richieste provenienti 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 che hanno eseguito l'accesso e di app legacy a cui è consentito impostare l'intestazione per scopi di test.

Indirizzo IP di origine

App Engine invia richieste di Cron dall'indirizzo IP 0.1.0.2. Per i job di Cron creati con versioni gcloud precedenti (326.0.0), le richieste di Cron proverranno da 0.1.0.1.

Timeout richiesta

Il timeout della richiesta di cron dipende dal tipo di scalabilità configurato per l'app:

Scalabilità automatica
Il timeout della richiesta è di 10 minuti.
Scalabilità di base e manuale
Il timeout della richiesta è di 24 ore.

Per scoprire di più, consulta Modalità di gestione delle istanze.

Limiti

Le applicazioni gratuite possono prevedere fino a 20 attività. Le applicazioni a pagamento possono avere fino a 250 attività pianificate.