Cum declanșează un planificator de sarcini un job?

Când un planificator de activități (de exemplu, cron) declanșează sarcini (de exemplu, joburi cron), o face „interogând” ceasul la fiecare perioadă minimă (de exemplu, secundă) sau înregistrează un apel invers care este „împins” când vine momentul?

Dacă este push/callback, cum face platforma de bază (de exemplu, Linux)? Există o „întrerupere hardware” sau un alt mecanism de apel invers, pentru evenimente bazate pe timp?

Deci, cum declanșează un planificator de sarcini un job?


person Julio Faerman    schedule 09.06.2014    source sursă


Răspunsuri (5)


Din paginile de manual:

Utilitarul cron se trezește apoi în fiecare minut, examinând toate crontab-urile stocate, verificând fiecare comandă pentru a vedea dacă ar trebui să fie rulată în minutul curent. La executarea comenzilor, orice ieșire este trimisă prin poștă proprietarului crontab-ului (sau utilizatorului numit în variabila de mediu MAILTO din crontab, dacă există).

person Joshua Nelson    schedule 12.06.2014

În poate depinde de implementare. Unii fac sondaje (cum s-a menționat mai sus), dar unii folosesc abordarea întreruperii (verificați când trebuie executată următoarea sarcină și setați alarma de sistem).

person ezaquarii    schedule 17.06.2014
comment
Acesta este ceea ce mă interesează cel mai mult, nu în mod specific cron, ci modul în care este declanșat cel mai mic nivel de declanșare. Dacă acest lucru este setat de sistemul de operare, cum se declanșează la rândul său? Sistemul de operare sondajează sau există vreo întrerupere hardware bazată pe timp de orice fel... - person Julio Faerman; 18.06.2014

Cron-ul de pe versiunea 7 a Unix avea următorul algoritm:

Algoritmul său a fost simplu:

1) Citiți /usr/etc/crontab 2) Stabiliți dacă vreo comandă trebuie să ruleze la data și ora curentă și, dacă da, rulați-le ca superutilizator, root. 3) Dormiți un minut 4) Repetați de la pasul 1.

Dar acest lucru a fost greu pentru sistem. Și folosiți o mulțime de resurse pentru mediul Multi user. Apoi a fost conceput un nou algoritm:

Algoritmul folosit de acest cron este următorul:

1) La pornire, căutați un fișier numit .crontab în directoarele de acasă ale tuturor deținătorilor de cont. 2) Pentru fiecare fișier crontab găsit, determinați data viitoare în care fiecare comandă trebuie să ruleze. 3) Plasați acele comenzi pe lista de evenimente Franta-Maly cu ora corespunzătoare și specificatorul de timp „cinci câmpuri”. 4) Introduceți bucla principală:

  1. Examinați intrarea sarcinii din capul cozii, calculați cât de departe trebuie să ruleze în viitor.
  2. Dormiți pentru acea perioadă de timp.
  3. La trezire și după verificarea orei corecte, executați sarcina în capul cozii (în fundal) cu privilegiile utilizatorului care a creat-o.
  4. Determinați data viitoare în care să rulați această comandă și plasați-o înapoi pe lista de evenimente la acea valoare de timp.

Implementările moderne sunt vixiecron și anacron. Aceasta a fost înlocuită de fcron. Nu am prea multe detalii despre implementarea lor.

person biplav    schedule 18.06.2014

Intenția acestor întrebări nu a fost despre CRON, ci despre programarea sarcinilor în general, folosind cron ca exemplu, îmi pare rău dacă acest lucru nu a fost clar în declarația de întrebare.

Am vrut să știu cum software-ul de cel mai jos nivel face programarea bazată pe timp, dacă trebuie să interogheze ceasul hardware sau dacă există un fel de întrerupere hardware pentru evenimente bazate pe timp.

Se pare că există de fapt o întrerupere hardware. Din wilipedia:

O utilizare tipică este de a genera întreruperi periodic prin împărțirea ieșirii unui oscilator cu cristal și avand un handler de întrerupere să numere întreruperile pentru a păstra timpul. Aceste întreruperi periodice sunt adesea folosite de către programatorul de sarcini al sistemului de operare pentru a reprograma prioritățile proceselor care rulează. Unele computere mai vechi au generat întreruperi periodice de la frecvența liniei de alimentare, deoarece era controlată de utilități pentru a elimina deviația pe termen lung a ceasurilor electrice.

http://en.wikipedia.org/wiki/Interrupt

Deci, deși cron face sondaje (mulțumesc @joshua-nelson), este posibil să nu facă, iar sistemul de operare nu.

person Julio Faerman    schedule 18.06.2014

demonii sunt programele pentru rularea procesului în fundal. Și Cron este un demon pentru a executa comenzi programate. Și obținerea acestor comenzi, Cron se uită în /etc/crontab sau în fișierele din /usr/lib/cron/tabs și dacă există vreun fișier de comandă acolo, Cron îl execută. Utilitarul Cron este lansat prin procesul lansat, care înlocuiește init ca pid 1.

person Ishu    schedule 12.06.2014