Użyj crona, ponieważ jest to lepsza i bardziej standardowa praktyka. Przynajmniej jeśli jest to coś, co będzie regularnie działać (nie tylko coś, co załatałeś razem za minutę). cron
jest czystszym i bardziej standardowym sposobem. Jest to również lepsze, ponieważ uruchamia powłokę odłączoną od terminala - nie ma problemu z przypadkowym zakończeniem i zależnościami od innych procesów.
Jeśli chodzi o zasoby: CPU: oba procesy śpią - kiedy śpią, nie marnują procesora. cron
budzi się częściej, aby sprawdzić rzeczy, ale i tak to robi (nie więcej dla twojego procesu). Jest to niewielki ładunek, większość demonów budzi się czasami. Pamięć: Prawdopodobnie cron
działasz niezależnie od tego procesu, więc nie jest to w ogóle narzut. Jednak cron uruchomi powłokę dopiero po wywołaniu skryptu, podczas gdy skrypt pozostanie załadowany do pamięci (proces bash ze środowiskiem - kilka kilobajtów, chyba że ładujesz wszystko do zmiennych powłoki).
Podsumowując, dla zasobów nie ma to znaczenia.
Główną różnicą, której szukasz, jest to, że
cron
nie działa stale. Jak wyjaśniono wman cron
:Innymi słowy,
cron
będzie uruchamiany tylko raz na minutę i sprawdzi, czy należy go uruchomić. Z drugiej strony twoje podejście do snu wymagałoby twojego rzeczywistegosleep
polecenia, powłoki, terminala iwhile
pętli (lub cokolwiek innego).Nawet gdyby uruchomili tę samą liczbę procesów,
cron
byłoby lepiej. Zostało to napisane właśnie dla tego przez ludzi, którzy zwykle są bardzo dobrzy w swojej pracy. Z pewnością zrobi to lepiej niż zwykła pętla powłoki.źródło
Różnica polega na tym, że wraz z dodawaniem kolejnych skryptów, które muszą spać, skończy się czekanie na więcej procesów zamiast jednego procesu (cron), który budzi się i uruchamia zaplanowane skrypty, które następnie zamykają się do następnego uruchomienia. Cron pozwala na jeden proces, który jest wyspecjalizowany w uruchamianiu innych skryptów na czas, a ponadto cron pozwala stosunkowo swobodnie planować, kiedy coś powinno zostać uruchomione, dni tygodnia lub miesiąca, określone godziny lub tylko co 5 minut itp.
* Ponowne zobaczenie tego przypomniało mi kolejną zaletę crona. Wszystkie skrypty uruchamiane okresowo znajdują się wtedy w jednym miejscu, a stamtąd można łatwo sprawdzić, kiedy i jak często będą uruchamiane. W przeciwnym razie musisz sprawdzić poszczególne skrypty.
źródło
Są już dobre i bardziej świadome odpowiedzi, ale chciałem tylko zauważyć, że dzięki temu
sleep
można zamrozić proces na różny czas, powiedzmy jako funkcję niektórych innych zmiennych.Jeśli piszę skrypt, aby sprawdzić procent pozostałej baterii i
notify-send
jeśli jest ona poniżej z góry określonego poziomu krytycznego, mogę wykonać skryptsleep
na czas, który jest funkcją bieżącego poziomu baterii w procentach, zamiast sprawdzania baterii co jedna lub dwie minuty z pomocą crona, nawet gdy wiem, że było 80%, kiedy ostatnio sprawdzałem.Battery_notify.sh
źródło
Korzystanie
sleep
zamiastcron
jednego zadania może być bardziej wydajne. Ale ponieważ zazwyczaj maszcron
bieganie w każdym przypadku, korzystanie z niego przychodzi za darmo lub wystarczająco blisko, ponieważ nie ma znaczenia. Więc jeśli nie korzystasz zcron
systemu wbudowanego, który w przeciwnym razie byłby wolny, wybrałbymcron
.źródło