¿Cómo se implementa realmente la programación cron y se asegura de que los scripts se ejecuten a tiempo?

9

Quiero preguntar sobre trabajos cron. OK, colocamos los scripts en el crontab y el demonio cron los ejecuta.

Ahora, si entiendo esto, cada minuto, cron comprueba el crontab de cada usuario y ejecuta los scripts configurados. Pero, ¿cómo se hace esto realmente? ¿Bifurca los procesos secundarios, etc.?

No puede ejecutar las tareas de forma secuencial ya que se perderían los tiempos (por ejemplo, debido a la espera de que termine un script de larga ejecución). Entonces, ¿cómo se implementa esto realmente?

Solo para ayudar, no estoy buscando un código de bajo nivel. Me bastaría una descripción de alto nivel (¿quizás del algoritmo?) O cómo se implementa en la mayoría de las distribuciones.

Jim
fuente

Respuestas:

9

Encontré estas preguntas y respuestas en StackOverflow tituladas: ¿Cómo programa cron internamente los trabajos? .

extracto de esa publicación y del artículo de wikipedia sobre cron

The algorithm used by this cron is as follows:

1. On start-up, look for a file named .crontab in the home directories of 
   all account holders.

2. For each crontab file found, determine the next time in the future that
   each command is to be run.

3. Place those commands on the Franta-Maly event list with their corresponding
   time and their "five field" time specifier.

4. Enter main loop:

   1. Examine the task entry at the head of the queue, compute how far in 
      the future it is to be run.

   2. Sleep for that period of time.

   3. On awakening and after verifying the correct time, execute the task 
      at the head of the queue (in background) with the privileges of the 
      user who created it.

   4. Determine the next time in the future to run this command and place 
      it back on the event list at that time

Este SuperUser Q&A titulado: ¿Cómo funciona cron? cubre algunas de sus preguntas adicionales. Por ejemplo, su pregunta sobre cómo maneja cron los trabajos programados para el mismo tiempo. Una de las respuestas en ese hilo establece que a medida que el demonio cron procesa cada tarea, bifurca cada trabajo programado para que ningún trabajo actúe como un bloqueador para trabajos que tienen tiempos superpuestos.

slm
fuente
Si se trata de una cola, las tareas se ejecutan una tras otra (las de la misma cola). Entonces, si una tarea necesita 3 minutos para ejecutarse y se espera que la próxima tarea en la cola se programe en el próximo minuto, ¿cómo sucede esto?
Jim
@ Jim - Creo que una simplificación que estás asumiendo es que está leyendo los archivos cada minuto cuando no hace esto en absoluto. Cuando guarda el archivo, el demonio crond incorpora el contenido del crontab para un usuario determinado y luego lo agrega a la cola en un orden ordenado en función del tiempo en el futuro que se supone que se ejecutará.
slm
Ok, en este caso, la cola podría tener tareas que deberían ejecutarse simultáneamente ¿Entonces los procesos secundarios se bifurcan o algo así?
Jim
@ Jim - exactamente. También vea mis comentarios adicionales en la respuesta.
slm
¿Cómo detecta nuevas tareas que creamos para cron? ¿Utiliza algo como inotify para mirar el sistema de archivos o algo más?
CMCDragonkai