Service Quartz.net突然停止触发作业

Service Quartz.net突然停止触发作业,service,scheduler,quartz.net,freeze,Service,Scheduler,Quartz.net,Freeze,我已经实现了quartz.net来安排项目中的任务。经过一些测试后,我将它部署在Prod env上,它开始表现得非常奇怪。 由于这个调度程序是windows服务中的用户,所以我使用日志进行调试。每个作业都通过log4net在日志文件中写入一些信息。 工作3-4天后,服务停止在日志文件中写入任何信息。 所有错误都会被提示写入日志文件,但没有任何错误。手动重启后,一切按预期启动3-4天,然后再次发生 以下是调度程序的启动方式: _jobsTimeTable = ComponentFactory.Re

我已经实现了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();
\u jobsTimeTable=ComponentFactory.Resolve();
//构造调度程序工厂
isSchedulerFactory schedFact=新StdSchedulerFactory();
//获取调度程序
isScheduler sched=schedFact.GetScheduler();
//触发器和作业的配置
int i=0;
字符串mainGroup=“mainGroup”;
foreach(var作业在_jobsTimeTable.时间表中)
{
var trigger=(icontrigger)TriggerBuilder.Create()
.WithIdentity(“触发器”+i,主组)
.WithCronSchedule(job.Value)
.Build();
var jobdail=JobBuilder.Create(Type.GetType(job.Key)).StoreDurably(true)
.WithIdentity(“作业”+i,主组).Build();
var ft=调度作业(作业详细信息,触发器);
_InfoFormat(“{0}已计划在:{1}运行,并根据表达式:{2}重复运行”,
jobDetail.Key,ft.ToLocalTime(),trigger.CronExpressionString);
i++;
}
sched.Start();

如果您有任何想法,我将不胜感激。

从您的代码中,您似乎没有对IScheduler进行全局引用,这最终会导致垃圾收集。在应用程序的生命周期中,应该始终使用静态引用来防止清理。

非常感谢,我将尝试修复此问题,看看是否有帮助。如果它是对的,我就把它标为答案。但事实上,我认为石英本身保存了所有它的调度程序的链接。很抱歉等待了很长时间,你的建议真的很有用。谢谢。