2013-04-08 10 views
5

Mam następną kwarcową pracę w aplikacji Grails. Zadanie oblicza statystyki i wysyła je wraz z tymi statystykami. Chcę, żeby ta praca była wykonywana codziennie o 7 rano.Praca kwarcowa w aplikacji Grails uruchamiana trzy razy

Moim problemem jest praca wykonywana trzy razy dziennie zamiast jednorazowo.

class DailyEmailJob { 
    def eventService 

    static triggers = { 
     cron name: 'emailTrigger', cronExpression: "0 0 7 * * ?" 
    } 

    def execute() { 
     eventService.send24StatsEmail() 
    } 
} 

jestem gospodarzem aplikacji Grails w Apache Tomcat/7.0.35, bieganie Grails 2.2.1 i kwarc-1.0-RC6

+0

Gdzie go hostujesz? Wystąpiły podobne problemy ... – marko

+0

Czy aplikacja jest zainstalowana tylko na jednym serwerze aplikacji? –

+0

Hostuję w nim na Rimuhosting.com w VPS. Aplikacja jest właśnie zainstalowana w jednym tomcat. –

Odpowiedz

2

Twoje wyrażenie cron wygląda OK. Funkcje automatycznego rozmieszczania Tomcat mogą być winne. Aby uzyskać niektóre sugestie, zobacz: https://stackoverflow.com/a/11990221

+0

Dodałem deployOnStartup = "false" autoDeploy = "false" i dzisiaj uruchamia się tylko dwa razy. Czy to możliwe, ponieważ mam wojnę i katalog pod $ CATALINA_HOME/webapps –

+0

Tak, to może wyjaśnić. Uważam, że zachowanie zależy również od tego, jak zdefiniowano "Kontekst" Twojej aplikacji (np. W pliku 'server.xml'? We własnym pliku' .xml' w polu 'conf \ Catalina \ localhost'). W każdym razie spróbuj przenieść swoje plik .war z aplikacji internetowych; Wierzę, że to pomoże. –

+0

Mam ten sam problem i nie jestem pewien, czy to jest przyczyną .. Moja praca zawsze wyzwala * trzy * razy. Dlaczego nie * dwa * lub * cztery *? @SergiodelAmo –

1

To co docs powiedzieć

Tak czy dzień- of-Week lub Day-of-Month musi być "?", lub pojawi się błąd, ponieważ wsparcie z podstawowej biblioteki nie jest kompletne. Nie można więc podać obu pól, ani pozostawić ich jako symboli wieloznacznych "*"; jest to odejście od specyfikacji crontab unix.

nadzieję, że pomoże

2

EDIT

poniższej analizie robi nie trzymać się dobrze w tym scenariuszu. Była to tylko hipoteza oparta na niezrozumiałych faktach. Jeśli zalecono, mogę usunąć odpowiedź.

END

Mam nadzieję, że mogę odpowiedzieć na moje pytanie zadałem w komentarzu.

"Jakie są czasy wywołuje inny niż 7 rano?"

Czy 7 AM, godzina czternasta i godzina dwudziesta pierwsza?

Uzasadnienie:

  • Patrz wersji quartz wtyczki [kwarcowy 1,0-RC6], który wykorzystuje org.quartz-scheduler:quartz:1.8.4. Patrz BuildConfig.groovy from Github.
  • Postępuj zgodnie z CronExpression API od odpowiadającego Javadoc.

Podkreślając istotną słownictwa: -

"Znak '/' jest używany do określenia przyrosty Na przykład "0/15" w polu sekund oznacza" sekund 0, 15, 30, and 45 ", a" 5/15 "w polu sekund oznacza" sekundy 5, 20, 35 i 50 ". Określenie" * "przed"/"jest równoważne określeniu 0 jest wartością, od której zaczyna się od Zasadniczo, dla każdego pola w wyrażeniu istnieje zestaw liczb, które można włączać i wyłączać, dla liczb i sekund, liczby mieszczą się w zakresie od 0 do 59. Dla godzin 0 do 23, dla dni z miesiąca 0 do 31, a od miesięcy 1 do 12. Symulacja znaków "/" Ply pomaga włączyć każdą "n-tą" wartość w danym zestawie. Tak więc "7/6" w polu miesiąca tylko włącza się w miesiącu "7", to NIE oznacza co 6 miesiąca, zauważ, że subtelność. "

W twoim przypadku wyrażenie cron: "0 0 7 * * ?" wyniki w prowadzeniu zadanie co 7 godzin w 24 godziny (dzień) wynikających z prowadzeniem o 7 rano (7 + 7) 2 PM, (7 + 7 + 7) godzina dwudziesta pierwsza.

Ta najnowsza dokumentacja z quartz-scheduler.org powiedzieć inaczej. Zapraszamy do obejrzenia przykładów here. Ponadto zapoznaj się z „znak specjalny /”.

na podstawie moich badań seconds i minutes [ja nie chcesz poczekać na 24 godziny, aby przetestować :)], mocno myślę, że poniżej cronExpression zadziała i uruchomi execute() dokładnie 7:00 Hrs codziennie:

Odpowiedź:

  1. "0 0 7/23 * * ?" [Uruchom zadanie co 24 godziny rozpoczynające się na 7. godzinie 0-cia minut i 0-sze Drugiego dnia]
  2. "0 0 0/23,7 * * ?" [synonimem odpowiedź 1, ale mniej obszerna.]

Poinformuj swoje wyniki testu. Mocno wierzę, że to zadziała. Mam również zamiar ustawić harmonogram na dzień/noc, aby przetestować wyniki po 24 godzinach (nie chcę manipulować zegarem JVM, aby uzyskać wyraźny wynik, chociaż pomyślnie przeszedłem próbę wykonania tego samego sabotażu.) . Opublikuje wyniki mojego rzeczywistego testu.

+0

Nie uruchamia się w trzech różnych czasach. Wywołuje on o 7:00 ostro trzy razy w ciągu kilku sekund. –

+0

Wyrażenie cron jest idealne, sprawdzone zgodnie z dokumentami, o których również wspomniałeś, nie wprowadzaj w błąd. Spróbuj na http://www.cronmaker.com/ – Kartikya

+0

Czy użyłeś już wtyczki graala? – dmahapatro

Powiązane problemy