Estos contenidos se han traducido de forma automática para su comodidad, pero Huawei Cloud no garantiza la exactitud de estos. Para consultar los contenidos originales, acceda a la versión en inglés.
Centro de ayuda> Cloud Container Engine> Preguntas frecuentes> Carga de trabajo> Otros> ¿Qué debo hacer si no se puede reiniciar una tarea programada después de haber sido detenida durante un período de tiempo?
Actualización más reciente 2023-08-08 GMT+08:00

¿Qué debo hacer si no se puede reiniciar una tarea programada después de haber sido detenida durante un período de tiempo?

Si una tarea programada se detiene durante la ejecución, antes de su reinicio, el sistema calcula la diferencia entre la última vez que la tarea se ejecutó con éxito y la hora actual y compara la diferencia de tiempo con el período de tarea programada multiplicado por 100. Si la diferencia de tiempo es mayor que el período multiplicado por 100, la tarea programada no se activará de nuevo. Para obtener más información, consulte Limitaciones de CronJob.

Por ejemplo, supongamos que un trabajo cron está configurado para crear un trabajo cada minuto a partir de las 08:30:00 y que el campo startingDeadlineSeconds no está definido. Si el controlador de trabajo cron deja de ejecutarse de 08:29:00 a 10:21:00, el trabajo no se iniciará debido a la diferencia de tiempo entre 08:29:00 y 10:21:00. 00 supera los 100 minutos, es decir, el número de tiempos de programación perdidos supera los 100 (en el ejemplo, un período de programación es de 1 minuto).

Si se establece el campo startingDeadlineSeconds, el controlador calcula el número de trabajos perdidos en los últimos x segundos (el x indica el valor de startingDeadlineSeconds). Por ejemplo, si startingDeadlineSeconds se establece en 200, el controlador cuenta el número de trabajos perdidos en los últimos 200 segundos. En este caso, si el controlador de trabajo cron deja de ejecutarse de 08:29:00 a 10:21:00, el trabajo comenzará de nuevo a las 10:22:00, porque solo se pierden tres solicitudes de programación en los últimos 200 segundos (en el ejemplo, un periodo de programación es de 1 minuto).

Solución

Configure el parámetro startingDeadlineSeconds en un trabajo cron. Este parámetro solo se puede crear o modificar mediante kubectl o las API.

Ejemplo de 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

Si vuelve a crear un trabajo cron, puede evitar temporalmente este problema.

Otros Preguntas frecuentes

more