concurrency - cronjob - ¿Cron comenzará un nuevo trabajo si el trabajo actual no está completo?
kubernetes cronjob (3)
Ambos correrán al mismo tiempo.
Posible duplicado:
Cómo evitar la ejecución del trabajo cron, si ya se está ejecutando
Tengo un trabajo cron
que puede tardar 2 minutos o 5 horas en completarse. Necesito asegurarme de que este trabajo siempre se ejecute.
Mi pregunta es:
¿Comenzará después de que termine la anterior o ambos se ejecutarán al mismo tiempo y desordenarán la base de datos si la configuro para que se ejecute cada minuto?
Ellos correrán al mismo tiempo. La práctica estándar alrededor de esto es crear un bloqueo de archivo (comúnmente denominado rebaño), y si el bloqueo no está disponible, no se ejecute.
Las ventajas de esto sobre el enfoque de Zdenek es que no requiere una base de datos , y cuando el proceso finaliza, el rebaño se libera automáticamente. Esto incluye casos en los que se detiene el proceso, se reinicia el servidor, etc.
Si bien no menciona en qué está escrito su trabajo cron, flock es estándar en la mayoría de los idiomas. Yo sugeriría buscar en Google los bloqueos y el idioma que estás usando, ya que esta será la solución más robusta y no depender de tiempos de espera aleatorios. Aquí hay algunos ejemplos de SO:
Sugeriría grabarlo en la base de datos. Me gustaría grabar cuando se inició el script y si la tarea se completó con éxito. El script también debe actualizar el registro en db, algo así como cada 5 minutos, todavía estoy en ejecución.
Cuando se inicia un nuevo trabajo, se debe verificar si todas las tareas anteriores han finalizado o si la última actualización se realizó hace más de unos minutos (?), Si es así, ejecute, no y luego salga.
De esta manera, sabrá que el script anterior se está ejecutando o, si falleció, el trabajo que no se ha completado y no se ha actualizado durante 10 minutos se marcará como finalizado.
Debo mencionar que esta solución podría ser mejor que el rebaño cuando tiene varios servidores y la tarea se puede activar en cualquiera de ellos.