O serviço cronológico do App Engine permite-lhe configurar tarefas agendadas regularmente que funcionam em horários definidos ou intervalos regulares. Estas tarefas são frequentemente conhecidas como tarefas cron. Estas tarefas cron são acionadas automaticamente pelo serviço cron do App Engine. Por exemplo, pode usar uma tarefa cron para enviar um relatório por email diariamente, atualizar alguns dados em cache a cada 10 minutos ou atualizar as informações de resumo uma vez por hora.
Uma tarefa cron faz um pedido HTTP GET
agendado para o ponto final especificado na mesma app onde a tarefa cron está configurada. O controlador desse ponto final executa a lógica quando é chamado.
O serviço Cron do App Engine não pode ser usado para chamar pontos finais da Web fora da app de anfitrião do App Engine. Não pode ser usado para chamar pontos finais do App Engine a partir de outras apps além da app de anfitrião.
Um pedido de tarefa cron está sujeito aos mesmos limites que os das filas de tarefas push.
Antes de começar
Para implementar ou atualizar programações, a sua conta requer uma das seguintes funções de IAM:
- Proprietário
- Editor
Pode definir a autorização na página IAM na Google Cloud consola.
Criar um trabalho cron
- Crie o ficheiro
cron.yaml
no diretório raiz da sua aplicação (juntamente comapp.yaml
). Adicione uma ou mais entradas
<cron>
ao seu ficheiro e defina os elementos necessários para a sua tarefa, incluindo os elementos obrigatórios<url>
e<schedule>
. Reveja a sintaxe e as opções de cron.yaml para ver mais detalhes acerca dos elementos do ficheirocron.yaml
.O exemplo seguinte cria uma tarefa cron básica que é executada diariamente:
cron: - description: "daily summary job" url: /tasks/summary target: beta schedule: every 24 hours
A especificação do destino é opcional e é o nome de um serviço/versão. Se estiver presente, o destino é adicionado antes do nome do anfitrião da sua app, o que faz com que a tarefa seja encaminhada para esse serviço/versão. Se não for especificado nenhum destino, a tarefa é executada nas versões do serviço configuradas para tráfego.
default
Crie um controlador para o URL da tarefa cron. O controlador deve executar todas as tarefas que quer agendar. O controlador deve responder com um código de estado HTTP entre 200 e 299 (inclusive) para indicar êxito. Podem ser devolvidos outros códigos de estado e podem ser usados para tentar novamente a tarefa cron.
web.xml
deve ser igual ao URL da tarefa cron.
Testar tarefas cron no servidor de programação
O servidor de desenvolvimento local não executa automaticamente as suas tarefas cron. Pode fazer pedidos diretamente ao URL da tarefa cron para testar a sua funcionalidade. Pode usar a interface cron local ou de tarefas agendadas para acionar os URLs das suas tarefas com curl ou uma ferramenta semelhante.
Repetir tarefas cron que falham
Se o controlador de pedidos de uma tarefa cron devolver um código de estado que não esteja no intervalo 200 a 299 (inclusive), o App Engine considera que a tarefa falhou. Por predefinição, não são feitas novas tentativas de tarefas com falhas, a menos que seja devolvido um código de estado 503. Nesse caso, são feitas novas tentativas a cada minuto até que a tarefa seja bem-sucedida ou devolva um código de estado entre 200 e 299.
Para definir a repetição de tarefas com falhas:
- Inclua um bloco
retry_parameters
no ficheirocron.yaml
. Escolha e defina os parâmetros de repetição no bloco
retry_parameters
.Por exemplo, este ficheiro
cron.yaml
de amostra contém uma única tarefa cron que está configurada para repetir até cinco vezes (a predefinição) com um recuo inicial de 2,5 segundos que duplica a cada vez.cron: - description: "retry demo" url: /retry schedule: every 10 mins retry_parameters: min_backoff_seconds: 2.5 max_doublings: 5
Saiba mais sobre as opções de repetição do cron.
Implementar tarefas cron
Para implementar as tarefas cron especificadas no ficheiro de configuração cron.yaml
, execute o seguinte comando:
gcloud
gcloud app deploy cron.yaml
Maven
mvn appengine:deployCron cron.yaml
Gradle
gradle appengineDeployCron cron.yaml
IDE
Se usar o IntelliJ ou o Eclipse, selecione os ficheiros de configuração individuais a implementar através do formulário de implementação.
Eliminar todas as tarefas cron
Para eliminar todas as tarefas cron:
Edite o conteúdo do ficheiro
cron.yaml
para:cron:
Implemente o ficheiro
cron.yaml
no App Engine.
Proteger URLs para o cron
Um controlador cron é apenas um controlador normal definido em app.yaml
. Pode impedir que os utilizadores acedam a URLs usados por tarefas agendadas restringindo o acesso a contas de administrador. As tarefas agendadas podem aceder a URLs apenas para administradores. Pode
restringir um URL adicionando login: admin
à configuração do controlador em
app.yaml
.
Um exemplo pode ter o seguinte aspeto em app.yaml
:
application: hello-cron
version: 1
runtime: java
api_version: 1
handlers:
- url: /report/weekly
servlet: mysite.server.CronServlet
login: admin
Para testar uma tarefa cron, inicie sessão como administrador e visite o URL do controlador no seu navegador.
Os pedidos do serviço Cron também contêm um cabeçalho HTTP:
X-Appengine-Cron: true
O cabeçalho X-Appengine-Cron
é definido internamente pelo App Engine. Se o seu controlador de pedidos encontrar este cabeçalho, pode confiar que o pedido é um pedido cron. Se o cabeçalho estiver presente num pedido de um utilizador externo à sua app, é removido, exceto para pedidos de administradores com sessão iniciada da aplicação, que têm autorização para definir o cabeçalho para fins de teste.
O App Engine emite pedidos Cron a partir do endereço IP
0.1.0.2
. Para tarefas cron criadas com versões mais antigas do gcloud (anteriores a 326.0.0), os pedidos cron vão ser enviados a partir de 0.1.0.1
.
Chamar o Google Cloud Endpoints
Não pode especificar um ponto final do Google Cloud no campo url
de uma tarefa cron.
Se quiser que a tarefa cron chame um Google Cloud Endpoint,
envie um pedido a um destino apresentado por um controlador na
sua app e chame a classe e o método do ponto final a partir do código do controlador.
Visualizar tarefas cron na consola Google Cloud
Pode ver trabalhos cron agendados no separador Trabalhos cron do App Engine do Cloud Scheduler.
Também pode ver registos para saber quando foram adicionadas ou removidas tarefas cron.
Saiba mais
Consulte informações detalhadas sobre a definição de tarefas cron na referência cron.yaml.