Cron vs systemd timery

83

Niedawno wskazano mi, że istnieje alternatywa dla crona, a mianowicie systemowe liczniki czasu.

Jednak nic nie wiem o czasach systemowych ani systemowych. Użyłem tylko crona.

Trwa dyskusja na Arch Wiki . Jednak szukam szczegółowego porównania między cronczasami systemowymi, skupiając się na zaletach i wadach. Używam Debiana, ale chciałbym ogólne porównanie dla wszystkich systemów, dla których te dwie alternatywy są dostępne. Ten zestaw może obejmować tylko dystrybucje systemu Linux.

Oto co wiem.

Cron jest bardzo stary, sięga późnych lat siedemdziesiątych. Pierwotnym autorem crona jest Ken Thompson, twórca Uniksa. Vixie cron, którego crony we współczesnych dystrybucjach Linuksa są bezpośrednimi potomkami, pochodzi z 1987 roku.

Systemd jest znacznie nowszy i nieco kontrowersyjny. Wikipedia mówi mi, że jej pierwsze wydanie miało miejsce 30 marca 2010 r.

Tak więc moja obecna lista zalet crona w stosunku do systemowych timerów to:

  1. Cron ma gwarancję, że znajdzie się w dowolnym systemie uniksowym, w tym sensie, że jest instalowanym, obsługiwanym oprogramowaniem. To się nie zmieni. Natomiast systemd może pozostać w dystrybucji Linuksa w przyszłości. Jest to głównie system inicjujący i może być zastąpiony innym systemem inicjującym.

  2. Cron jest prosty w użyciu. Zdecydowanie prostsze niż systemowe timery.

Odpowiednia lista zalet systemowych timerów w stosunku do crona to:

  1. Czasomierze systemowe mogą być bardziej elastyczne i wydajne. Ale chciałbym tego przykłady.

Podsumowując, oto kilka rzeczy, które warto zobaczyć w odpowiedzi:

  1. Szczegółowe porównanie cron i systemowych timerów, w tym zalety i wady korzystania z każdego z nich.
  2. Przykłady rzeczy, które można zrobić, a które nie.
  3. Co najmniej jedno porównanie skryptu cron i systemowego skryptu timerów.
Faheem Mitha
źródło
4
„Gwarantujemy, że Cron znajdzie się w dowolnym systemie uniksowym. To się nie zmieni”. - Zdecydowanie bym to debatował. Chociaż historycznie cron często był zawarty w podstawowej konfiguracji instalacji uniksowych, w większości dzisiejszych systemów jest to po prostu dowolny opcjonalny pakiet oprogramowania. W rzeczywistości istnieje kilka popularnych alternatyw cron (np. Anacron, fcron, jobber), które mogą być lepsze niż cron. Funkcjonalność crona nie jest niezbędna do działania systemu, tak jak systemd lub init, więc jeśli martwisz się obecną i przyszłą przenośnością, wolałbym nie stawiać na to zakładów.
Guido
6
To dość lista rzeczy, które chcesz w odpowiedzi. Myślę, że może powinieneś poświęcić trochę czasu na naukę narzędzi i sprawdzić, czy możesz samodzielnie sformułować odpowiedzi, a jeśli masz konkretne rzeczy, których nie rozumiesz, zapytaj ich tutaj.
larsks
5
Nie całkiem. Powiedziałem wszystko, co chcę powiedzieć na ten temat. Dłuższa dyskusja na temat wszystkiego, co dotyczy systemd, jest gorsza niż bezcelowa - niektórzy uważają, że drobne korzyści, które przynosi systemd, są warte monopolizacji korporacyjnej ekosystemu linux. Inni nie.
cas
7
„Cron jest bardzo stary, sięga późnych lat siedemdziesiątych”. Faktycznie poprawne, ale całkowicie nieistotne, o ile pakiety w twoim systemie są utrzymywane w rozsądny i stabilny sposób. Słońce jest również bardzo stare, ale mam nadzieję, że nie oznacza to, że powinniśmy zastąpić je bardziej błyszczącym i nowszym.
Otheus
5
@Otheus Myślę, że źle rozumiesz tę rolę - mówienie, że coś istnieje od dawna, nie jest obelgą. Przynajmniej dla wielu ludzi z Uniksa. To bardziej jak stwierdzenie, że dom ma setki lat - to z pewnością oznacza, że ​​będzie miał pewne problemy, niektóre rzeczy będą dziwne po modernizacji, ale ma też pewien urok i musiał być dobrze zbudowany. To nie znaczy, że jest zaniedbany. To proste narzędzie, które sprawdziło się przez cztery dekady.
derobert

Odpowiedzi:

43

Oto kilka uwag na temat tych dwóch :

  1. sprawdzanie, co naprawdę robi zadanie crona, może być trochę bałaganem, ale wszystkie systemowe zdarzenia czasowe są dokładnie rejestrowane w dzienniku systemowym, podobnie jak inne systemowe jednostki oparte na zdarzeniu, które znacznie ułatwia.

  2. timery systemowe to usługi systemowe z wszystkimi możliwościami zarządzania zasobami, planowania procesorów IO, ...
    Istnieje lista:

    • filtry systemowe
    • identyfikatory użytkowników / grup
    • kontrola członkostwa
    • niezła wartość
    • Wynik OOM
    • Klasa i priorytet planowania IO
    • Zasady planowania CPU Procesor
    • umask powinowactwa
    • opóźnienie timera
    • bezpieczne bity
    • dostęp do sieci i ...
  3. z opcją zależności, podobnie jak w innych usługach systemowych, mogą istnieć zależności od czasu aktywacji.

  4. Jednostki można aktywować na różne sposoby, można także skonfigurować ich kombinację. usługi mogą być uruchamiane i wyzwalane przez różne zdarzenia, takie jak użytkownik, rozruch, zmiany stanu sprzętu lub na przykład 5 minut po podłączeniu sprzętu i ...

  5. znacznie łatwiejsza konfiguracja niektórych plików i prostych tagów, aby wykonać różnorodne dostosowania w zależności od potrzeb za pomocą systemowych timerów

  6. Łatwo włączaj / wyłączaj całość dzięki:

    systemctl enable/disable 
    

    i zabij wszystkie dzieci z pracy za pomocą:

    systemctl start/stop
    
  7. systemowe zegary mogą być planowane z kalendarzami i czasami monotonicznymi, co może być naprawdę przydatne w przypadku różnych stref czasowych i ...

  8. systemowe zdarzenia czasowe (kalendarz) są dokładniejsze niż cron (wydaje się dokładność 1s)

  9. systemowe zdarzenia czasowe są bardziej znaczące, dla tych powtarzających się, a nawet tych, które powinny wystąpić raz, oto przykład z dokumentu :

    Sat,Thu,Mon-Wed,Sat-Sun → Mon-Thu,Sat,Sun *-*-*00:00:00
      Mon,Sun 12-*-* 2,1:23 → Mon,Sun 2012-*-* 01,02:23:00
                    Wed *-1 → Wed *-*-01 00:00:00
            Wed-Wed,Wed *-1 → Wed *-*-01 00:00:00
                 Wed, 17:48 → Wed *-*-* 17:48:00 
    
  10. Z punktu widzenia wykorzystania procesora systemowy zegar budzi procesor po upływie czasu, ale cron robi to częściej.

  11. Zdarzenia czasowe mogą być planowane w oparciu o czasy zakończenia wykonań. Niektóre opóźnienia można ustawić między wykonaniami.

  12. Komunikacja z innymi programami jest również godna uwagi, czasem niektóre programy potrzebują znajomości liczników czasu i stanu ich zadań.

F.sb
źródło
2
To dobry wysiłek, dziękuję. Przydałoby się jednak bardziej bezpośrednie porównanie z cronem, w tym przykład. Ponadto część tego, co piszesz, nie jest całkowicie jasna, np. „Z punktu widzenia wykorzystania procesora zegar systemowy budzi procesor po upływie czasu, ale cron robi to częściej”.
Faheem Mitha
Witaj @ F.sb! Twoja odpowiedź sugeruje, że możesz planować zadania w różnych strefach czasowych. Czy to jest poprawne? Jak byś to zrobił? Byłaby to znacząca przewaga nad standardowymi implementacjami crona, ale nie mogłem znaleźć żadnych informacji na ten temat, z wyjątkiem man systemd.timektórych wydaje się to zaprzeczać: Nielokalne strefy czasowe oprócz UTC nie są obsługiwane.
Tad Lispy
Zależności są przydatne. Na przykład, jeśli kopia zapasowa hosta działa jako systemowy zegar, możesz użyć zależności, aby upewnić się, że eksport bazy danych zostanie zakończony bezpośrednio przed utworzeniem kopii zapasowej.
vk5tu
6
Bądź bardziej szczery z góry. Zaczynasz od stwierdzenia, że ​​są to pewne argumenty na temat tych dwóch kwestii, a następnie kontynuujesz, wymieniając zalety preferowanego wyboru . Nie jest źle, że masz preferencje, ale powinieneś to powiedzieć z góry. Ponadto fakt, że wszystko działa na korzyść jednego systemu i nie uwzględnia zalet tego systemu, sprawia, że ​​czuję, że ta odpowiedź jest wypaczona.
Jasper,
2
@jasper drodzy, używam ich obu w zależności od moich potrzeb i zawsze wybierasz jeden z nich w oparciu o twoje potrzeby, właśnie wspomniałem o faktach opartych na dokumentach i instrukcjach.
F.sb,
16

Prosto z pyska konia, że ​​tak powiem: https://wiki.archlinux.org/index.php/Systemd/Timers#As_a_cron_replacement

Fragment strony powyżej:

Korzyści

Główne zalety korzystania z timerów wynika z każdego zadania mającego własną usługę systemową. Niektóre z tych korzyści to:

  • Zadania można łatwo rozpocząć niezależnie od ich timerów. Upraszcza to debugowanie.
  • Każde zadanie można skonfigurować do działania w określonym środowisku (patrz systemd.exec (5)).
  • Zadania mogą być dołączane do grup.
  • Zadania można skonfigurować tak, aby zależały od innych systemowych jednostek.
  • Zadania są rejestrowane w dzienniku systemowym w celu łatwego debugowania.

Ostrzeżenia

Niektóre rzeczy, które są łatwe do zrobienia z cronem, są trudne do wykonania tylko z jednostkami timera.

  • Złożoność: aby skonfigurować zadanie czasowe w systemie, należy utworzyć dwa pliki i uruchomić kilka poleceń systemctl. Porównaj to z dodaniem pojedynczego wiersza do pliku crontab.
  • E-maile: nie ma wbudowanego odpowiednika MAILTO crona do wysyłania e-maili w przypadku niepowodzenia zadania. Zobacz następną sekcję, aby zobaczyć przykład konfigurowania ekwiwalentu za pomocą OnFailure =.
shdwlynx
źródło
6
Errr ... nie jestem pewien, co sądzę o odpowiedzi, która jest prawie w całości skopiuj i wklej, zwłaszcza, że ​​licencje nie są kompatybilne. Ale przynajmniej powinieneś naprawić ten bit „patrz następna sekcja”. Z tym błędem wydaje się, że nie przeczytałeś tego, co skopiowałeś i wkleiłeś.
derobert