【发布时间】:2015-12-01 22:29:03
【问题描述】:
我在由 SQL Server 数据库支持的 ASP.NET 应用程序中运行 Quartz.NET(最新)进程。我有一个管理进程,它使用来自Get all jobs in Quartz.NET 2.0 的代码运行并将当前正在运行的作业的详细信息输出到日志文件。
这是一个示例(和真实)输出:
-----STARTING JOBS STATUS CHECK at 11/28/2015 5:51:06 PM -----
Job group: UPDATE_TRANSFER_FEED_JOB_GROUP
Job name: 155143_UPDATE_TRANSFER_FEED_JOB
Job data - Key: SourceFeedUpdateID, Value: 155143
Description:
Trigger name: 155143_UPDATE_TRANSFER_FEED_JOB
Trigger group: UPDATE_TRANSFER_FEED_JOB_GROUP
Trigger type: SimpleTriggerImpl
Trigger state: Complete
Previous fire time: 11/28/2015 5:41:00 PM
-----FINISHED JOBS STATUS CHECK-----
我会定期看到某些显示“触发状态:完成”但从未离开队列的作业(这可能是不正确的术语)。换句话说,每次输出作业状态时,它们都会不断出现在日志中(如上所示),并且它们会无限期地停留在那里。此外,我为这种类型的作业设置了一个作业侦听器,我看到对于卡住的作业 Listener.JobWasExecuted() 是 never 调用的。如我所料,其他作业完成并从输出中消失。
处理这些卡住的作业的唯一方法是重新启动网络应用程序。重新启动后,侦听器的 JobWasExecuted() 立即触发,它们显示“Job Requests Recovery = Yes”,并且在下次运行作业状态记录时消失。
我感觉部分原因是我不了解工作的生命周期和状态。
你能帮我理解一下吗?
【问题讨论】:
标签: asp.net .net quartz-scheduler quartz.net