Como o cronograma é realmente implementado e garante que os scripts sejam executados dentro do prazo?

9

Eu quero perguntar sobre trabalhos cron. OK, colocamos os scripts no crontab e o daemon cron os executa.

Agora, se eu entendo isso, a cada minuto, o cron verifica o crontab de cada usuário e executa os scripts configurados. Mas como isso é realmente feito? Isso bifurca processos filho, etc?

Ele não pode executar as tarefas sequencialmente, pois os tempos seriam perdidos (por exemplo, devido à espera de um script de longa execução). Então, como isso é realmente implementado.

Só para ajudar, não estou procurando por código de baixo nível. Uma descrição de alto nível (talvez do algoritmo?) Ou como isso é implementado na maioria das distros seria suficiente para mim.

Jim
fonte

Respostas:

9

Encontrei essas perguntas e respostas no StackOverflow intitulado: Como o cron agende internamente trabalhos? .

trecho desse post e do artigo da 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

As perguntas e respostas deste superusuário intituladas: Como o cron funciona? aborda algumas de suas perguntas adicionais. Por exemplo, sua pergunta sobre como o cron lida com tarefas agendadas para o mesmo tempo. Uma das respostas nesse encadeamento declara que, à medida que o daemon cron processa cada tarefa, ele bifurca cada trabalho agendado para que nenhum trabalho único atue como um bloqueador para trabalhos com tempos sobrepostos.

slm
fonte
Se for uma fila, as tarefas serão executadas uma após a outra (aquelas na mesma fila). Portanto, se uma tarefa precisa de 3 minutos para ser executada e a próxima tarefa na fila deve ser agendada no próximo minuto, como isso acontece?
Jim
@ Jim - Eu acho que uma simplificação que você está assumindo é que ela está lendo os arquivos a cada minuto quando não faz isso. Quando você salva o arquivo, o daemon crond está incorporando o conteúdo do crontab para um determinado usuário e, em seguida, adicionando-o à fila em uma ordem classificada, com base no tempo no futuro em que é suposto executar.
Slm
Ok.Então, neste caso, a fila pode ter tarefas que devem ser executadas simultaneamente.Então, os processos filho são bifurcados ou algo assim?
Jim
@ Jim - exatamente. Veja também meus comentários adicionais na resposta.
Slm
Como ele detecta novas tarefas que criamos para o cron? Ele usa algo como inotify para assistir ao sistema de arquivos ou algo mais?
CMCDragonkai