Quartz.netスケジューラーを機能させようとしていますが、将来スケジュールされているジョブに対してなぜそれが起動しないのかわかりません。私は毎分起動するcronトリガーでテストしましたが、それは(ジョブとすべてで)機能するので、ジョブコードに問題がないことはわかっています。
私が試したこと:
- ISchedulerFactoryをグローバル静的変数にする
- ISchedulerをグローバル静的変数にする
- Application_Startの最後に電子メール通知を追加したので、いつ起動するかがわかります
- スケジューラコードを変更するたびにアプリを再起動すると通知メールが送信されるので、再起動されたことがわかります。
私はこのプログラムを共有ホスティング環境で実行しています(それがそれに影響を与えるかどうかはわかりません)。私の推測(そしてこれは単なる推測です)は何かがガベージコレクションされているということですが、何がなぜかはわかりません。
void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
// construct a scheduler factory
ISchedulerFactory schedFact = new StdSchedulerFactory();
// get a scheduler
IScheduler sched = schedFact.GetScheduler();
sched.Start();
// construct job info
JobDetail jobDetail = new JobDetail("myJob", null, typeof(Recorder));
jobDetail.JobDataMap["domain"] = "www.mydomain.com";
jobDetail.JobDataMap["userId"] = "2";
// Create trigger (everything is in UTC!!!)
CronTrigger cronTrigger = new CronTrigger("Schedule");
cronTrigger.StartTimeUtc = TriggerUtils.GetEvenSecondDate(DateTime.UtcNow);
cronTrigger.TimeZone = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time"); // run in pacific timezone
cronTrigger.CronExpressionString = "0 30 13 ? * MON-FRI *";
sched.ScheduleJob(jobDetail, cronTrigger);
}