首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Quartz.net突然停止触发作业

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

Stack Overflow用户
提问于 2012-06-18 20:21:31
回答 1查看 1.1K关注 0票数 1

我已经在我的项目中实现了quartz.net来调度任务。经过一些测试后,我在Prod env上部署了它,它的行为开始变得非常奇怪。因为这个调度器是windows服务中的用户,所以我使用日志进行调试。每个作业通过log4net在日志文件中写入一些信息。工作3-4天后,服务会停止在日志文件中写入任何信息。所有的错误都会被提示写到日志文件中,没有任何错误。在手动重启之后,一切都会像预期的那样启动3-4天,然后再次发生。

以下是scheduler的启动方式:

代码语言:javascript
复制
_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();

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-19 02:23:47

从您的代码看,您似乎没有持有对IScheduler的全局引用,这最终会导致垃圾回收。您应该在应用程序的生命周期内始终拥有一个静态引用,以防止清理。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11082754

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档