Agendar tarefas

Pode executar fluxos de trabalho de curta duração executando-os como tarefas. Executar tarefas descreve como executar tarefas em Apps.

Também pode agendar a execução de tarefas em intervalos recorrentes especificados através do formato unix-cron. Com as tarefas agendadas, primeiro envia uma app que executa a tarefa, tal como faz com uma tarefa não agendada. Em seguida, cria um trabalho para agendar a tarefa.

Pode definir uma programação para que a sua tarefa seja executada várias vezes por dia ou em dias e meses específicos.

Envie uma app para executar tarefas agendadas

  1. Clone o repositório test-app.

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

    Envie a app com o comando kf push APP_NAME --task. A flag --task indica que a app se destina a ser usada para executar tarefas e, por isso, não são criadas rotas na app, e esta não é implementada como uma aplicação de execução prolongada.

    kf push test-app --task
  3. Confirme que não foram criadas instâncias nem rotas de apps ao listar a app.

    kf apps

    Repare que a app não é iniciada e não tem URLs.

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

Crie um trabalho

Para executar uma tarefa de acordo com uma programação, primeiro tem de criar um trabalho que descreva a tarefa.

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

A tarefa é iniciada suspensa ou não agendada e não cria tarefas até ser executada manualmente por kf run-job ou agendada por kf schedule-task.

Execução manual

Os trabalhos podem ser executados ad hoc de forma semelhante à execução de tarefas por kf run-task. Esta opção pode ser útil para testar a tarefa antes de a agendar ou executar conforme necessário, além do agendamento.

kf run-job test-job

Este comando executa a tarefa definida pelo trabalho imediatamente uma única vez.

Agendar uma tarefa

Para agendar a tarefa para execução, tem de fornecer um agendamento unix-cron no comando kf schedule-job.

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

Este comando aciona a criação automática de tarefas pelo trabalho no horário especificado. Neste exemplo, uma tarefa é executada a cada minuto.

Pode atualizar a agenda de uma tarefa executando kf schedule-task com uma nova agenda. Os trabalhos no Kf só podem ter um único agendamento cron. Isto difere do programador do PCF, que permite várias programações para uma única tarefa. Se precisar de várias programações cron, pode consegui-lo com várias tarefas.

Gerir trabalhos e agendamentos

Veja todas as tarefas, agendadas e não agendadas, no espaço atual através do 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ó pode ver tarefas agendadas ativamente 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>

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

Cancelar o horário de um trabalho

Pode parar uma tarefa agendada com o comando kf delete-job-schedule.

kf delete-job-schedule test-job

Este comando suspende a tarefa e impede que crie tarefas na programação anterior. A tarefa não é eliminada e pode ser agendada novamente por kf schedule-job para continuar a execução.

Elimine uma tarefa

Pode eliminar toda a tarefa com o comando kf delete-job.

kf delete-job test-job

Este comando elimina a tarefa e todas as tarefas criadas pela tarefa, tanto as execuções agendadas como as manuais. Se ainda existirem tarefas em execução, este comando elimina-as à força.

Se quiser garantir que as tarefas em execução não são interrompidas, elimine primeiro o horário dos trabalhos com kf delete-job-schedule, aguarde que todas as tarefas sejam concluídas e, em seguida, elimine o trabalho chamando kf delete-job.