Comment la planification cron est-elle réellement mise en œuvre et garantit que les scripts s'exécutent à temps?

9

Je veux poser des questions sur les emplois cron. OK, nous plaçons les scripts dans la crontab et le démon cron les exécute.

Maintenant, si je comprends bien, chaque minute, cron vérifie la crontab de chaque utilisateur et exécute les scripts configurés. Mais comment cela se fait-il réellement? Provoque-t-il des processus enfants, etc.?

Il ne peut pas exécuter les tâches séquentiellement car les temporisations seraient perdues (par exemple en raison de l'attente de la fin d'un script de longue durée). Alors, comment est-ce réellement mis en œuvre.

Juste pour vous aider, je ne recherche pas de code de bas niveau. Une description de haut niveau (de l'algorithme peut-être?) Ou comment cela est implémenté dans la plupart des distributions me suffirait.

Jim
la source

Réponses:

9

J'ai trouvé ce Q&A sur StackOverflow intitulé: Comment cron planifie-t-il en interne les tâches? .

extrait de ce post et de l' article de wikipedia sur 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

Ce Q&R SuperUser intitulé: Comment fonctionne cron? couvre certaines de vos questions supplémentaires. Par exemple, votre question sur la façon dont cron gère les tâches planifiées en même temps. L'une des réponses de ce thread indique que lorsque le démon cron traite chaque tâche, il bifurque chaque travail planifié afin qu'aucun travail n'agisse comme un bloqueur pour les travaux qui se chevauchent.

slm
la source
S'il s'agit d'une file d'attente, les tâches s'exécutent l'une après l'autre (celles de la même file d'attente). Donc, si une tâche a besoin de 3 minutes pour s'exécuter et que la prochaine tâche dans la file d'attente devrait être planifiée dans la minute suivante, comment cela se produit-il?
Jim
@Jim - Je pense qu'une simplification que vous supposez est qu'il lit les fichiers toutes les minutes quand il ne le fait pas du tout. Lorsque vous enregistrez le fichier, le démon crond incorpore ensuite le contenu de la crontab pour un utilisateur donné et l'ajoute à la file d'attente dans un ordre trié en fonction de l'heure future à laquelle il est censé s'exécuter.
slm
Dans ce cas, la file d'attente peut avoir des tâches qui doivent être exécutées simultanément. Les processus enfants sont donc bifurqués ou quelque chose?
Jim
@Jim - exactement. Voir également mes commentaires supplémentaires dans la réponse.
slm
Comment détecte-t-il les nouvelles tâches que nous créons pour cron? Utilise-t-il quelque chose comme inotify pour regarder le système de fichiers ou autre chose?
CMCDragonkai