Programar tarefas

É possível executar fluxos de trabalho de curta duração executando-os como tarefas. O artigo Como executar tarefas explica como executar as tarefas em "Aplicativos".

Também é possível programar tarefas para serem executadas em intervalos recorrentes especificados usando o formato unix-cron. Com as tarefas programadas, você envia primeiro um aplicativo que executa a tarefa como faz com uma tarefa não programada. Depois, cria um job para programar a tarefa.

É possível definir uma programação para que a tarefa seja executada diversas vezes por dia ou em dias e meses determinados.

Enviar um aplicativo para executar tarefas programadas

  1. Clone o repositório do test-app:

    git clone https://github.com/cloudfoundry-samples/test-app test-app
    cd test-app
  2. Envie o aplicativo.

    Envie o aplicativo com o comando kf push APP_NAME --task. A sinalização --task indica que o app deve ser usado para executar tarefas. Portanto, nenhuma rota será criada no app e não será implantada como um aplicativo de longa duração.

    kf push test-app --task
  3. Verifique se nenhuma instância ou rota do app foi criada listando o aplicativo:

    kf apps

    Observe que o aplicativo não foi iniciado e não tem URLs:

    Listing Apps in Space: test-space
    Name                     Instances  Memory  Disk  CPU   URLs
    test-app                 stopped    1Gi     1Gi   100m  <nil>
    

Criar uma vaga

Para executar uma tarefa de modo programado, crie primeiro um job que a descreva:

kf create-job test-app test-job "printenv"

O job começa como suspenso ou não programado e não cria tarefas até que seja executado manualmente por kf run-job ou programado por kf schedule-task.

Executar um job manualmente

Os jobs podem ser executados ad hoc de maneira semelhante à execução de tarefas por kf run-task. Essa opção pode ser útil para testar o job antes de programar ou executar, conforme necessário, além da programação.

kf run-job test-job

Esse comando executa imediatamente a tarefa definida pelo job apenas uma vez.

Programar um job

Para programar o job para execução, forneça uma programação unix-cron no comando kf schedule-job.

kf schedule-job test-job "* * * * *"

Esse comando aciona o job para criar tarefas automaticamente na programação especificada. Neste exemplo, uma tarefa é executada a cada minuto.

Para atualizar a programação de um job, execute kf schedule-task com uma nova programação. Os jobs do Kf só podem ter uma única programação cron. Essa é a diferença do PCF Scheduler, que permite várias programações para um único job. Se você precisa de várias programações cron, pode usar vários jobs.

Gerenciar jobs e programações

Veja todos os jobs, programados e não programados, no espaço atual usando o comando kf jobs.

$ kf jobs
Listing Jobs in Space: test space
Name               Schedule    Suspend  LastSchedule  Age  Ready  Reason
test-job           * * * * *   <nil>    16s           2m   True   <nil>
unscheduled-job    0 0 30 2 *  true     16s           2m   True   <nil>

Além disso, só é possível visualizar os jobs que estão ativamente programados com o comando kf job-schedules.

$ kf job-schedules
Listing job schedules in Space: test space
Name           Schedule   Suspend  LastSchedule  Age  Ready  Reason
test-job       * * * * *  <nil>    16s           2m   True   <nil>

Observe que unscheduled-job não está listado na saída kf job-schedules.

Cancelar a programação de um job

É possível interromper um job programado com o comando kf delete-job-schedule.

kf delete-job-schedule test-job

Esse comando suspende o job e impede que ele crie tarefas na programação anterior. O job não é excluído e pode ser programado novamente por kf schedule-job para continuar a execução.

Excluir uma vaga

O job inteiro pode ser excluído com o comando kf delete-job.

kf delete-job test-job

Esse comando exclui o job e todas as tarefas criadas por ele, tanto as execuções programadas como as manuais. Se ainda houver tarefas em execução, o comando as excluirá de modo forçado.

Se quiser garantir que as tarefas em execução não sejam interrompidas, primeiro exclua a programação de jobs com kf delete-job-schedule, aguarde a conclusão de todas as tarefas e, em seguida, exclua o job chamando kf delete-job.