現在、SQLServer2008を使用するMVC3WebサイトでQuartz.netのv1.0.3.3を使用しています。
WebサイトはIIS7で実行されており、IdleTimeoutプロパティを0に設定しています。AppWarmupModuleもインストールしています。セーフティネットとして、5分ごとにページをダウンロードするように設定されたWindowsスケジュールタスク(PowerShellスクリプトを使用)もあり、アプリのウォームアップモジュールが正しく機能しているかどうかわからないため、サイトがスリープ状態になっていないことを確認します。
毎日のさまざまな時点で実行するために、13個のcronトリガーが分散しています。1日1回、1時間ごと、10/15分ごとに発火するものもあります(すべて単純)。トリガーが別のジョブと同じジョブを使用することはないため、ブロッキングが問題ではないことがわかる限り、各ジョブには独自のトリガーがあります。
ジョブが開始および終了するたび、および発生する可能性のある例外をログに記録します。ジョブが実行されても、例外をスローしているものはないため、ジョブがトリガーされておらず、サイレントに失敗していることがわかります。
すべてのジョブが実行されます。問題となるのは周波数です。昨日、1時間ごとのジョブ(0 0 * * *?)が午前2、5、6、および8に実行され、午後3時まで再度実行されませんでした。この間、他の無関係なジョブが実行されたため、サイトは起動してトリガーを起動します。
web.configのquartzセクションは次のとおりです(接続文字列ノードを削除しました)。
<quartz>
<add key="quartz.threadPool.type" value="Quartz.Simpl.SimpleThreadPool, Quartz" />
<add key="quartz.threadPool.threadCount" value="25" />
<add key="quartz.threadPool.threadPriority" value="Normal" />
<add key="quartz.jobStore.misfireThreshold" value="60000" />
<add key="quartz.jobStore.useProperties" value="true" />
<add key="quartz.jobStore.type" value="Quartz.Impl.AdoJobStore.JobStoreTX, Quartz" />
<add key="quartz.jobStore.driverDelegateType" value="Quartz.Impl.AdoJobStore.SqlServerDelegate, Quartz" />
<add key="quartz.jobStore.tablePrefix" value="[qrtz]." />
<add key="quartz.jobStore.dataSource" value="default" />
<add key="quartz.dataSource.default.provider" value="SqlServer-20" />
<add key="quartz.jobStore.lockHandler.type" value="Quartz.Impl.AdoJobStore.UpdateLockRowSemaphore, Quartz" />
<add key="quartz.jobStore.acquireTriggersWithinLock" value="true" />
</quartz>
当初はThreadPriorityを「Low」に設定し、ThreadCountを5に設定していましたが、その後「Normal」に引き上げ、25に引き上げましたが無駄になりました。
古いバージョンのquartz.netを使用していることはわかっていますが、データベースとすべてのジョブがv1.0に対してコーディングされており、ジョブとdbを再実装することは時間の制約があるため、アップグレードしたくありません。
私はインターウェブを精査しました。cronトリガーが起動しない質問はたくさんありますが、散発的または断続的なトリガーに対する救済策を見つけることができません。
この長い質問を読んでくれてありがとう、そしてあなたが助けてくれてありがとう。