O que fazer se uma tarefa agendada não puder ser reiniciada depois de ser interrompida por um período de tempo?
Se uma tarefa agendada for interrompida durante a execução, antes de sua reinicialização, o sistema calcula a diferença entre a última vez que a tarefa foi executada com êxito e a hora atual e compara a diferença de horário com o período da tarefa agendada multiplicado por 100. Se a diferença horária for maior que o período multiplicado por 100, a tarefa agendada não será acionada novamente. Para obter detalhes, consulte Limitações de cronJob.
Por exemplo, suponha que um cron job está definido para criar um job a cada minuto a partir das 08:30:00 e o campo startingDeadlineSeconds não está definido. Se o controlador de cron job parar de ser executado das 08:29:00 às 10:21:00, o job não será iniciado devido à diferença de horário entre 08:29:00 e 10:21:00. 00 excede 100 minutos, ou seja, o número de horários de agendamento perdidos excede 100 (no exemplo, um período de agendamento é de 1 minuto).
Se o campo startingDeadlineSeconds estiver definido, o controlador calculará o número de tarefas perdidas nos últimos x segundos (x indica o valor de startingDeadlineSeconds). Por exemplo, se startingDeadlineSeconds estiver definida como 200, o controlador contará o número de jobs perdidos nos últimos 200 segundos. Nesse caso, se o controlador de cron job parar de ser executado das 08:29:00 às 10:21:00, o job será iniciado novamente a partir das 10:22:00, porque apenas três agendamentos são perdidos nos últimos 200 segundos (no exemplo, um período de agendamento é de 1 minuto).
Solução
Configure o parâmetro startingDeadlineSeconds em um cron job. Esse parâmetro pode ser criado ou modificado somente usando kubectl ou APIs.
Exemplo YAML:
apiVersion: batch/v1 kind: CronJob metadata: name: hello spec: startingDeadlineSeconds: 200 schedule: "* * * * *" jobTemplate: spec: template: spec: containers: - name: hello image: busybox:1.28 imagePullPolicy: IfNotPresent command: - /bin/sh - -c - date; echo Hello restartPolicy: OnFailure
Se você criar um cron job novamente, poderá evitar temporariamente esse problema.