Il servizio Cron di App Engine consente di configurare attività pianificate regolarmente che operano in orari specifici o a intervalli regolari. Queste attività sono comunemente chiamate cron job. Questi cron job vengono attivati automaticamente Servizio cron di App Engine. Ad esempio, puoi utilizzare un job cron per inviare un report via email ogni giorno, per aggiornare alcuni dati memorizzati nella cache ogni 10 minuti o per aggiornare le informazioni di riepilogo una volta all'ora.
Un cron job invia una richiesta HTTP GET
programmata all'endpoint specificato nella stessa app in cui è configurato il cron job. Il gestore per quell'endpoint esegue
la logica quando viene chiamato.
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.
Una richiesta di job cron è soggetta agli stessi limiti previsti per le code di attività push.
Prima di iniziare
Per eseguire il deployment o aggiornare le pianificazioni, il tuo account richiede uno dei seguenti requisiti Ruoli IAM:
- Proprietario
- Editor
Puoi impostare l'autorizzazione nella Pagina IAM nella console Google Cloud.
Creazione di un cron job
- Crea il file
cron.yaml
nella directory principale del tuo dell'applicazione (insieme aapp.yaml
). Aggiungi una o più voci
<cron>
al file e definisci gli elementi necessari per il job, inclusi gli elementi<url>
e<schedule>
obbligatori. Esamina la sintassi e le opzioni di cron.yaml per ulteriori dettagli sugli elementi del filecron.yaml
.L'esempio seguente crea un cron job di base che viene eseguito ogni giorno:
cron: - description: "daily summary job" url: /tasks/summary target: beta schedule: every 24 hours
La specifica di destinazione è facoltativa ed è il nome di un servizio o di una versione. Se presente, il target è anteposto al nome host dell'app, causando il job il routing a quel servizio/versione. Se non viene specificato nessun target, il job verrà eseguito nelle versioni di
default
e servizi configurati per il traffico.Crea un gestore per l'URL del cron job. L'handler deve eseguire tutte le attività che vuoi pianificare. Il gestore deve rispondere con un codice di stato HTTP tra 200 e 299 (inclusi) per indicare il successo. È possibile recuperare altri codici di stato che possono essere utilizzati per riprovare il job cron.
web.xml
deve essere lo stesso dell'URL del cron job.
Test dei cron job nel server di sviluppo
Il server di sviluppo locale non esegue automaticamente i job cron. Puoi effettuare richieste direttamente all'URL del tuo cron job per testare la funzionalità. Puoi utilizzare l'interfaccia di cron o delle attività pianificate locale per attivare gli URL dei tuoi job con curl o uno strumento simile.
Nuovi cron job non riusciti
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, a meno che non venga restituito un codice di stato 503, nel qual caso viene eseguito un nuovo tentativo ogni minuto finché non va a buon fine o non viene restituito un codice di stato compreso tra 200 e 299.
Per impostare di nuovo i job non riusciti:
- Includi un blocco
retry_parameters
nel filecron.yaml
. Scegli e imposta il parametro riprova parametri nel Blocco
retry_parameters
.Ad esempio, questo file
cron.yaml
di esempio contiene un singolo job cron configurato per riprovare fino a cinque volte (il valore predefinito) con un intervallo di attesa 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
Scopri di più sulle opzioni di ripetizione di cron.
Eseguire il deployment dei cron job
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 dei campi
cron.yaml
file in:cron:
Esegui il deployment del file
cron.yaml
in App Engine.
Protezione degli URL per cron
Un gestore cron è solo un normale gestore definito in app.yaml
. Puoi impedire
agli utenti di accedere agli URL utilizzati dalle attività pianificate limitando l'accesso a
Google Workspace for Education. Le attività pianificate possono accedere agli URL solo per amministratori. Puoi limitare un URL aggiungendo login: admin
alla configurazione dell'handler in app.yaml
.
Un esempio potrebbe essere il seguente in app.yaml
:
application: hello-cron
version: 1
runtime: java
api_version: 1
handlers:
- url: /report/weekly
servlet: mysite.server.CronServlet
login: admin
Per testare un job cron, accedi come amministratore e visita l'URL dell'handler nel browser.
Le richieste del servizio cron conterranno anche un'intestazione HTTP:
X-Appengine-Cron: true
L'intestazione X-Appengine-Cron
viene impostata internamente da App Engine. Se le tue
il gestore delle richieste trova questa intestazione e può considerare attendibile la richiesta
richiesta. Se l'intestazione è presente nella richiesta di un utente esterno alla tua app,
vengono eliminati, ad eccezione delle richieste da parte di amministratori che hanno eseguito l'accesso
a cui è consentito impostare l'intestazione a scopo di test.
App Engine invia richieste Cron dall'indirizzo IP0.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
.
Chiamata a Google Cloud Endpoints
Non puoi specificare un endpoint Google Cloud nel
campo url
di un job cron.
Se vuoi che il tuo cron job chiami un endpoint Google Cloud,
inviare una richiesta a una destinazione pubblicata da un gestore
la tua app e chiama la classe e il metodo dell'endpoint dal codice gestore.
Visualizzazione dei cron job nella console Google Cloud
Puoi visualizzare i cron job pianificati in I cron job di App Engine di Cloud Scheduler .
Puoi anche visualizzare i log per vedere quando sono stati aggiunti o rimossi i job cron.
Scopri di più
Consulta le informazioni dettagliate sulla definizione dei cron job nella documentazione di riferimento di cron.yaml.