2013-08-12 9 views
36

Zważywszy, że Seler jest już częścią stosu do uruchamiania kolejek zadań (tj. Nie jest on dodawany tylko do uruchamiania cron, wydaje się przesadą IMHO).Dlaczego uruchamianie zaplanowanych zadań za pomocą Celery byłoby lepsze niż crontab?

W jaki sposób funkcja "okresowych zadań" może być korzystna jako zamiennik crontaba? Szukając następujących punktów.

  • Główne plusy/minusy ponad crontab
  • Stosować przypadki, seler jest lepszym wyborem niż crontab
  • Django specyficzny przypadek użycia: Seler vs crontab do uruchomienia django zadań okresowych opartych gdy seler została ujęta w stosie jako django-celery dla zadań django w kolejce.
+2

Największą zaletą jest to, że cv-ev-vars mają tendencję do oderwania się od reszty wdrażania aplikacji - serwera aplikacji wsgi i pracownika selera. Posiadanie okresowych zadań w selerze pozwala uniknąć wielu ścieżek i ustawień piekła. Jest to jednak wyłącznie wyrok: moja analiza dotyczy przede wszystkim konfiguracji kodu i instalacji opartej głównie na django, ale wielojęzyczna baza kodów z wieloma innymi plikami cronjobs może uznać środowisko cron za "bardziej standardowe" niż środowisko django. – AdamKG

+1

[Ta odpowiedź] (http://stackoverflow.com/questions/16232572/distributed-task-queues-ex-celery-vs-crontab-scripts), choć nie wyczerpująca, zapewnia kilka dobrych punktów w tym kierunku. A także łatwiejsze do zarządzania/kontrolowania zadań przez administratora django, zamiast logować się do serwerów i ręcznie edytować plik crontab. – Sudipta

Odpowiedz

32

Używam crona dla strony produkcyjnej i przerzuciłem się na selera na obecny projekt. jestem znacznie bardziej niż do selera cron, oto dlaczego:

  • Seler + Celerybeat ma precyzyjniejszy niż cron. Cron nie może działać więcej niż raz na minutę, podczas gdy seler może (mam zadanie uruchamiane co 90 sekund, które sprawdza pocztę e-mail, aby wysyłać wiadomości, a drugie czyści listę użytkowników online).
  • Linia cron musi wywoływać skrypt lub unikalne polecenie, z absolutną ścieżką i informacjami o użytkowniku. Seler wywołuje funkcje Pythona, nie trzeba pisać więcej niż kodu.
  • Z selerem, aby wdrożyć na innej maszynie, zazwyczaj wystarczy pobrać/skopiować kod, który zazwyczaj znajduje się w jednym miejscu. Wdrażanie za pomocą crona wymagałoby więcej pracy (możesz go zautomatyzować, ale ...)
  • Naprawdę znajduję seler lepiej pasujący niż cron do rutynowego czyszczenia (pamięć podręczna, baza danych) i ogólnie do krótkich zadań. Zrzucenie bazy danych jest jednak bardziej pracą dla crona, ponieważ nie chcesz zaśmiecać kolejki zdarzeń zbyt długimi zadaniami.
  • Co najmniej, seler jest łatwo dystrybuowany na różnych maszynach.
+3

+1. zawsze możesz dodawać i zarządzać okresowymi zadaniami ze strony administratora, bez konieczności łączenia się z konsolą serwera. – panchicore

+0

Niektóre uwagi: Zadania Cron, które działają często i mogą się "nakładać", powinny być uruchamiane z flokiem, gdy nakładanie się nie jest pożądane. Zadania do selekcji dla takich przypadków powinny mieć określony czas wygaśnięcia. Serwery mogą mieć różne domyślne strefy czasowe i należy wziąć to pod uwagę podczas konfigurowania crona.Seler może być skonfigurowany do używania konkretnej strefy czasowej na poziomie aplikacji z CELERY_TIMEZONE. Kolejka zadań selera zużywa pamięć lub miejsce na dysku: powinieneś być pewien, że kolejkowanie nie rośnie w sposób nieokreślony. "Wdrażanie za pomocą cron" może być w pewnym stopniu zautomatyzowane dzięki 'run-parts' – imposeren

3

Selery jest wskazywane za każdym razem, gdy trzeba koordynować zadania na wielu komputerach, zapewnić, że zadania będą działać, nawet gdy maszyny są dodawane lub usuwane z grupy roboczej, mają możliwość ustawienia czasu wygaśnięcia dla zadań, zdefiniowania wieloetapowych zadań za pomocą raczej niż w liniowym przepływie zależności, lub mają jedno repozytorium logiki szeregowania, które działa tak samo w wielu systemach operacyjnych i wersjach.