Come viene effettivamente implementata la pianificazione cron e si assicura che gli script vengano eseguiti in tempo?


9

Voglio chiedere dei lavori cron. OK, posizioniamo gli script nel crontab e il demone cron li esegue.

Ora, se ho capito questo, ogni minuto cron controlla il crontab di ciascun utente ed esegue gli script configurati. Ma come viene effettivamente fatto? Forcella processi figlio ecc?

Non è possibile eseguire le attività in sequenza poiché i tempi andrebbero persi (ad es. A causa del completamento di uno script di lunga durata). Quindi, come viene effettivamente implementato.

Solo per dare una mano, non sto cercando un codice di basso livello. Una descrizione di alto livello (forse dell'algoritmo?) O di come questo sia implementato nella maggior parte delle distro mi basterebbe.

Risposte:


9

Ho trovato queste domande e risposte su StackOverflow intitolato: In che modo cron pianifica internamente i lavori? .

estratto da quel post e l' articolo di Wikipedia su 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

Domande e risposte su SuperUser intitolate: Come funziona cron? copre alcune delle tue domande aggiuntive. Ad esempio, la tua domanda su come gestisce cron i lavori programmati per lo stesso tempo. Una delle risposte in quel thread afferma che mentre il demone cron elabora ogni attività, esso forgia ogni lavoro programmato in modo che nessun singolo lavoro funga da blocco per lavori che hanno tempi sovrapposti.


Se si tratta di una coda, le attività vengono eseguite una dopo l'altra (quelle nella stessa coda). Quindi, se un'attività ha bisogno di 3 minuti per essere eseguita e l'attività successiva nella coda dovrebbe essere programmata al minuto successivo, come può succedere?
Jim,

@Jim - Penso che una semplificazione che stai supponendo sia quella di leggere i file ogni minuto quando non lo fa affatto. Quando si salva il file, il demone crond incorpora il contenuto del crontab per un determinato utente e lo aggiunge alla coda in un ordine ordinato in base al tempo in futuro che si suppone venga eseguito.
slm

Ok, quindi in questo caso, la coda potrebbe avere compiti che dovrebbero essere eseguiti contemporaneamente. Quindi i processi figlio sono biforcuti o qualcosa del genere?
Jim,

@Jim - esattamente. Vedi anche i miei commenti aggiuntivi nella risposta.
slm

Come rileva le nuove attività che creiamo per cron? Usa qualcosa come inotify per guardare il filesystem o qualcos'altro?
CMCDragonkai,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.