调度程序不执行作业,甚至不会注册它

时间:2012-07-25 20:11:12

标签: c# windows-services quartz-scheduler quartz.net quartz.net-2.0

我创建了以下内容:

  • Windows服务
  • quartz scheduler
  • 一个名为IJob的{​​{1}}实现,它包含一系列我打算通过Quartz调度程序执行的任务。

Windows服务会覆盖 OnStart 以调用调度/安装类,该类尝试在Quartz中创建我想在给定时间范围内运行的单个调度任务(此时,这是例如,每30秒只需一次,以测试过程)

我在其中一个示例中使用了相同的代码来创建作业和触发器 - 触发器包含一系列代码,可以立即启动,并且每30秒重复一次。

然后我调用Worker并最终在调度程序对象上调用Schedule()

我使用installutil.exe将服务推送到服务列表中,启动服务并查看我的内部日志框架,向我显示服务正在启动,正在创建调度程序并调度作业(逐行记录输出)因为我一直有问题...)问题任务不会运行一次而且不会重复。服务坐在那里愉快地运行,但从不旋转执行任何事情。

如果我使用Exists方法,传入JobKey - 它总是说错误。作业计数为零,在调度和启动调度程序后立即进行测试。

我正在使用这种方法设置IJobDetail:

Start()

并使用:

创建触发器
IJobDetail job = JobBuilder.Create<Worker>()
                .WithIdentity("job1", "group1")
                .Build();

然后把它连接起来:

TriggerBuilder.Create()
    .WithIdentity("trigger1", "group1")
    .ForJob(job)
    .StartAt(DateTime.Now)
    .WithSimpleSchedule(x => x.WithIntervalInSeconds(30).WithRepeatCount(10))
    .Build();

我不知道为什么会发生这种情况,事件日志中没有任何内容,服务没有任何问题,代码出现没有任何问题,因为我已经推了记录语句(在/ bin / debug中输出到txtfile)之后的每一行&amp;有很多异常处理。

有什么想法吗?通用Create上的Build()会告诉调度程序我定义的类型是sched.ScheduleJob(job, trigger); sched.Start(); 方法所在的位置吗?

修改 我从this post on SO(@ jadenedge的回答)中获取了配置部分,并将其放在了Windows服务的app.config中。这里的可能性是1.0 / 2.0不匹配?

我希望在app.config中进行配置,理想情况下,在其他地方没有其他配置。

2 个答案:

答案 0 :(得分:2)

您是否正在启动一个保持流程运行的线程?服务启动后,您的进程是否还在内存中?

答案 1 :(得分:0)

我有这个问题,哦,男孩,它让我绝对疯狂。碰巧我有一个可以随时运行的尖峰项目,但我的主要项目不会运行!

问题:我的项目的命名空间中有点/句点,例如MyProject.UpdateService,因为我的峰值只是命名为QuartzTest

逐行调试发现,当我将Windows服务名称设置为MyProjectUpdateService时,Quartz作业就会注册。

TL / DR: 确保您的Windows服务名称中没有点。

更新:我已经做了一些测试,看起来运行Quartz的Windows服务的服务名称的最大长度是25个字符。它没有错误 - 它只是不会启动。