Il servizio cron di App Engine consente di configurare attività programmate regolarmente eseguite in orari specifici o a intervalli regolari. Queste attività sono comunemente note come cron job. Questi cron job vengono attivati automaticamente dal servizio cron di App Engine. Ad esempio, potresti utilizzare un cron job per inviare quotidianamente un report via email, aggiornare alcuni dati memorizzati nella cache ogni 10 minuti o aggiornare le informazioni di riepilogo una volta all'ora.
Un cron job invia una richiesta HTTP GET
pianificata all'endpoint specificato nella stessa
app in cui è configurato il cron job. Il gestore di quell'endpoint esegue
la logica quando viene chiamato.
Non è possibile 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 gli endpoint di App Engine da altre app diverse dall'app host.
Una richiesta cron job è soggetta agli stessi limiti di quelli per le code di attività push.
Prima di iniziare
Per eseguire il deployment o l'aggiornamento delle pianificazioni, il tuo account richiede uno dei seguenti 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 della tua 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>
richiesti. 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/versione. Se presente, il target viene anteposto al nome host dell'app, causando l'instradamento del job a quel servizio/versione. Se non viene specificata alcuna destinazione, il job verrà eseguito nelle versioni del servizio
default
configurate per il traffico.Crea un gestore per l'URL del cron job. Il gestore deve eseguire tutte le attività che vuoi pianificare. Il gestore deve rispondere con un codice di stato HTTP compreso tra 200 e 299 (incluso) per indicare l'esito positivo. È possibile restituire altri codici di stato che possono essere utilizzati per riprovare a eseguire il cron job.
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 cron job. Puoi effettuare richieste direttamente all'URL del cron job per testare la tua funzionalità. Puoi utilizzare l'interfaccia cron locale o delle attività pianificate per attivare gli URL dei job con curl o uno strumento simile.
Nuovo tentativo di cron job non riuscito
Se il gestore di richieste di un cron job restituisce un codice di stato non compreso nell'intervallo 200-299 (incluso), App Engine considera il job come non riuscito. Per impostazione predefinita, i job non riusciti non vengono tentati di nuovo, a meno che non venga restituito un codice di stato 503, nel qual caso viene ripetuto ogni minuto finché l'operazione non riesce o restituisce un codice di stato 200-299.
Per impostare i job non riusciti da riprovare:
- Includi un blocco
retry_parameters
nel filecron.yaml
. Scegli e imposta i parametri di ripetizione nel blocco
retry_parameters
.Ad esempio, questo file
cron.yaml
di esempio contiene un singolo cron job configurato per riprovare 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
Scopri di più sulle opzioni di nuovo tentativo cron.
Deployment di cron job
Per eseguire il deployment dei cron job specificati nel file di configurazione cron.yaml
, esegui questo 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 di cui eseguire il deployment utilizzando il modulo di deployment.
Eliminazione di tutti i cron job in corso...
Per eliminare tutti i cron job:
Modifica i contenuti del file
cron.yaml
in:cron:
Esegui il deployment del file
cron.yaml
in App Engine.
Protezione degli URL per cron
Un gestore cron è semplicemente un normale gestore definito in app.yaml
. Per impedire agli utenti di accedere agli URL utilizzati dalle attività pianificate, limita l'accesso agli account amministratore. Le attività programmate possono accedere agli URL solo amministrativi. Puoi
limitare un URL aggiungendo login: admin
alla configurazione del gestore in
app.yaml
.
Un esempio potrebbe avere il seguente aspetto 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 cron job, accedi come amministratore e visita l'URL del gestore nel browser.
Le richieste del servizio cron conterranno anche un'intestazione HTTP:
X-Appengine-Cron: true
L'intestazione X-Appengine-Cron
è impostata internamente da App Engine. Se il gestore delle richieste trova questa intestazione, può considerare attendibile che la richiesta sia una richiesta cron. Se è presente in una richiesta di un utente esterno alla tua app, l'intestazione viene rimossa, ad eccezione delle richieste degli amministratori dell'applicazione che hanno eseguito l'accesso, che sono autorizzati a impostarla a scopo di test.
App Engine genera richieste cron provenienti dall'indirizzo IP 0.1.0.2
. Per i cron job creati con versioni precedenti di gcloud (antecedenti alla versione 326.0.0), le richieste cron provengono da 0.1.0.1
.
Chiamata a Google Cloud Endpoints
Non puoi specificare un endpoint Google Cloud nel campo url
di un cron job.
Se vuoi che il tuo cron job chiami un endpoint Google Cloud,
emetti una richiesta a una destinazione gestita da un gestore
nella tua app e chiama la classe e il metodo dell'endpoint dal codice del gestore.
Visualizzazione dei cron job nella console Google Cloud
Puoi visualizzare i cron job pianificati nella scheda cron job di App Engine di Cloud Scheduler.
Puoi anche visualizzare i log per vedere quando sono stati aggiunti o rimossi i cron job.
Scopri di più
Per informazioni dettagliate sulla definizione dei cron job, consulta il riferimento cron.yaml.