Używanie usługi cron vs. system zarządzanej do częstych zadań

0

Jeśli jakieś zadanie powinno być uruchamiane często, ale niekoniecznie precyzyjnie, jakie byłyby korzyści z korzystania cronz korzystania z usługi (np. Zarządzanej przez upstart) za pomocą skryptu pętli

#!/bin/sh
while true
do
    do_task
    sleep 3600
done

?

Dzisiejszym upstartmożemy wybrać użytkownika za pomocą setuidpolecenia, a upstart można skonfigurować tak, aby zrestartował skrypt, jeśli umrze, zatrzymaj go, jeśli chcesz itp.

Czy w tej sytuacji jest jakakolwiek korzyść z bałagania się z cronem?

dronus
źródło

Odpowiedzi:

1

Uruchamianie z Crona jest „fajniejsze”. Na początek zajmie mniej zasobów - twój skrypt zużyje dodatkowe zasoby (pamięć na powłokę, timer i dodatkowe procesy i deskryptory plików przychodzą mi na myśl). Podczas gdy praktycznie maszyny są niesamowicie mocne, są po prostu mniej eleganckie.

Cron ma także porządny sposób obsługi stdout -> e-mail lub what-have-you, który może być przydatny do debugowania.

Jeśli używasz Crona, nie musisz używać różnych uprawnień, po prostu powiedz cronowi, którego użytkownika użyć.

Oczywiście użycie upstart ma pewne zalety - na przykład możesz chcieć pewnego stopnia losowości w oczekiwaniu lub harmonogramie przetwarzania, którego Cron nie lubi. Są chwile, kiedy takie rozwiązanie jest lepsze niż Cron - ale myślę, że są to przypadki narożne.

Na przykład, jeśli chcesz rozpocząć i zatrzymać proces i mieć kontrolę nad użytkownikiem, Upstart może być lepszym sposobem.

Davidgo
źródło
0

cron jest używany, gdy chcesz, aby proces był wykonywany w ściśle określonym czasie bezwzględnym (tj. 3:15 rano codziennie lub co godzinę o X: 05 lub mniej więcej), podczas gdy twój skrypt zależy od czasu jego uruchomienia. W twoim przykładzie będzie on uruchamiany co godzinę od momentu uruchomienia, co powinno odpowiadać sekwencji rozruchowej. Więc jeśli komputer uruchomi się o 1:05, wykonasz pracę o każdym X: 05, a jeśli uruchomi się o 3:36, twoje zadania zostaną wykonane o X: 36.

Jeśli chcesz, aby było to wykonywane mniej więcej raz na godzinę, tak naprawdę to się nie zmienia, ale oczywiście może działać w dowolnym miejscu między pierwszą a ostatnią minutą godziny, w zależności od rozruchu. W rzeczywistości, jeśli twoja czynność do_task jest długa i zajmuje dużo czasu, może nawet skończyć się rzadziej niż raz na godzinę (ponieważ sen jest obliczany na końcu zadania, więc jeśli do_task zajmuje 30 minut, to zadanie będzie uruchamiane co 1 : 30 godzin w twoim przypadku)

Z drugiej strony, używając crona, jeśli twój system nie zawsze działa, możesz łatwo stracić niektóre zdarzenia (ponieważ są one wykonywane tylko wtedy, gdy warunek jest dokładny). W tym przypadku anakron jest bardziej sugerowany (ponieważ po prostu wygląda czas od ostatniego wykonania). Inną sprawą jest to, że cron i tak wykona zadanie, nawet jeśli poprzednia istota jeszcze się nie skończyła, co w niektórych przypadkach może być dobrą lub złą rzeczą, podczas gdy skrypt nie.

Krótko mówiąc: jeśli potrzebujesz określonego i wiesz, że cron czasu jest zwykle lepszy, jeśli potrzebujesz tylko okresowego zadania bez określonych harmonogramów, możesz zacząć od początku.

fede.evol
źródło