Quartz.net突然停止触发工作

时间:2012-06-18 12:21:31

标签: service scheduler quartz.net hang

我已经实现了quartz.net来安排项目中的任务。经过一些测试后,我将它部署在Prod env上,它开始表现得非常奇怪。  由于此调度程序是Windows服务中的用户,因此我使用日志进行调试。每个作业都通过log4net在日志文件中写入一些信息。  工作3-4天后,服务停止在日志文件中写入任何信息。  提示所有错误都写入日志文件,没有任何错误。手动重启后,一切都按原样开始3-4天,然后再次发生。

这是调度程序的启动方式:

_jobsTimeTable = ComponentFactory.Resolve<TimeTable>();

// construct a scheduler factory
ISchedulerFactory schedFact = new StdSchedulerFactory();
// get a scheduler
IScheduler sched = schedFact.GetScheduler();

// Configuration of triggers and jobs
int i = 0;
string mainGroup = "mainGroup";
foreach (var job in _jobsTimeTable.TimeTable)
{
    var trigger = (ICronTrigger)TriggerBuilder.Create()
                                          .WithIdentity("trigger" + i, mainGroup)
                                          .WithCronSchedule(job.Value)
                                          .Build();

    var jobDetail = JobBuilder.Create(Type.GetType(job.Key)).StoreDurably(true)
                                .WithIdentity("job" + i, mainGroup).Build();

    var ft = sched.ScheduleJob(jobDetail, trigger);

    _log.InfoFormat("{0} has been scheduled to run at: {1} and repeat based on expression: {2}",
                    jobDetail.Key, ft.ToLocalTime(), trigger.CronExpressionString);

    i++;
}

sched.Start();

我真的很感激任何想法。

1 个答案:

答案 0 :(得分:2)

从您的代码中可能看起来您没有持有对IScheduler的全局引用,这最终会导致垃圾回收。应始终为应用程序的生命周期提供静态引用,以防止清理。