2013-04-08 9 views
5

Grailsアプリケーションで次のQuartzジョブを使用しています。ジョブは、いくつかの統計を計算し、これらの統計を使用して電子メールを送信します。私は仕事が毎日7時に実行されるようにしたい。GrailsアプリケーションのQuartzジョブが3回トリガされる

私の問題は、ジョブが1回ではなく3回毎回トリガされることです。

class DailyEmailJob { 
    def eventService 

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

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

私は、これはドキュメントが

いずれかの日 - を言うことでGrailsを2.2.1と石英-1.0-RC6

+0

あなたはそれをどこにホスティングしていますか?私は同様の問題を経験しています... – marko

+0

アプリケーションはただ1つのアプリケーションサーバーにインストールされていますか? –

+0

私はVPSのRimuhosting.comでそれをホスティングしています。アプリケーションは1つのtomcatにインストールされています –

答えて

2

あなたのcron式はOKです。 Tomcatの自動展開機能が原因かもしれません。いくつかの提案については、https://stackoverflow.com/a/11990221

+0

deployOnStartup = "false" autoDeploy = "false"を追加しましたが、今日では2回だけトリガーします。それは私が$ CATALINA_HOME/webappsの下に戦争とディレクトリを持っているからかもしれません –

+0

はい、それはそれを説明することができます。私はその振る舞いがアプリケーションの 'Context'がどのように定義されているか(' server.xml'の '?xml'ファイルの' conf \ Catalina \ localhost'のように)にも依存していると思います。 Webアプリケーションの.warファイル。それが助けになると私は信じている。 –

+0

私は同じ問題を抱えていて、これが原因であるかどうかはわかりません。私の仕事は常に3回*トリガーします。なぜ2 *または4 *ではないのですか? @SergiodelAmo –

1

を実行し、Apache Tomcatの/ 7.0.35でGrailsアプリケーションをホスティングしています基本的なライブラリのサポートが完了していないため、「週」や「日」は「?」にする必要があります。したがって、両方のフィールドを指定することはできず、両方の値をワイルドカード "*"として残すこともできません。これはunixのcrontabの仕様とは別のものです。

2

EDIT

以下の分析に役立ちます

ホープはないは、このシナリオでは成り立ちません。これは生の誤解された事実に基づく仮説に過ぎない。アドバイスがあれば、私は答えを取り除くことができます。

END

私はコメントで尋ねた自分の質問に答えることができると思います。

は、 "それは、午前7時以外のトリガー時間は何をしている?"

が、それは、2 PM9 PM7 AMですか?

理由:

  • org.quartz-scheduler:quartz:1.8.4を使用quartzプラグイン[石英-1.0-RC6]のバージョンを参照してください。 BuildConfig.groovy from Githubを参照してください。
  • 対応するJavadocCronExpression APIに従います。

重要な言い回しのハイライト: -

" '/' 文字が刻みを指定するために使用される例えば "0/15秒" 秒フィールドの手段" は0、15、 30秒、45秒」、秒フィールドの「5/15」は「5,20,35,50秒」を意味します。「/」の前に「*」を指定することは、0を指定することと同じです基本的に、式の各フィールドには、オンとオフを切り替えることができる数値のセットがあります。秒と分の場合、数値の範囲は0〜59です。0〜23時間、0〜 31、および1〜12ヶ月。"/"文字シムプライは、与えられたセットのすべての「n番目」の値をオンにするのに役立ちます。したがって、月のフィールドの "7/6"は月 "7"だけをオンにし、6番目の月を意味するものではありません。微妙に注意してください。あなたのケースでは

のcron式:午前7時に実行されている結果としてジョブを実行中"0 0 7 * * ?"結果24時間(日)で7時間ごとに、(+ 7 7)午後2時、(+ 7 + 7 7)午後9時。

quartz-scheduler.orgからこの最新のドキュメントは、それ以外の場合は言う。例here。また、「/特殊文字」勉強を見てください。secondsminutesに私のテストに基づいて

[私はしませんでしたテストするために24時間待って:)]、私は強く以下のcronExpressionが動作し、をトリガすると思う正確7:00 Hrs毎日の:

回答:

  1. "0 0 7/23 * * ?" [7時0番目の分、その日の0番目の第二から始まる24時間ごとにジョブを実行します]
  2. "0 0 0/23,7 * * ?" [代名詞へ答えは1ですが冗長ではありません。]

テスト結果をお知らせください。私はこれがうまくいくと強く信じている。 24時間後に結果をテストするために、昼夜のためにスケジューラーを設定する予定です(明確な結果を得るためにJVMの時計を改ざんしたくはありませんが、同じ改ざんをうまく行ってテストしました)。 。私の実際のテストの結果を掲載します。

+0

3つの異なるタイミングでトリガーしません。それは数秒で7時に3回鋭くトリガーします。 –

+0

cronの式は完璧です。また、あなたが言及したドキュメントに従ってチェックしてください。誤解しないでください。 http://www.cronmaker.com/で試してください – Kartikya

+0

まだgrails quartzプラグインを使用しましたか? – dmahapatro

関連する問題