Quartz.NET工作配置为每天运行一次,第一天工作但后续几天无法启动

时间:2011-09-28 04:06:10

标签: asp.net scheduling quartz.net

我已经在我的asp.net应用程序中配置了quartz.net,并且我的工作设置为每天凌晨1点运行。如果我更改job-config.xml文件以使作业在2分钟内运行,则会自动获取更改而不重新启动应用程序池,并且该作业将被触发。但是,如果我恢复更改以便在凌晨1点再次开始工作,那么它似乎无法启动。对我来说显而易见的原因是应用程序池或IIS已重新启动,这会导致我的asp.net应用程序关闭(实际上关闭了quartz.net,因为它是同一个asp的部分包装。 net process),但为了测试quartz.net是否仍在运行,没有任何iisreset或app-pool循环,我再次更改job-config.xml文件,再次在2分钟内启动并运行作业,所以似乎没有发生应用程序池回收或IIS重置的情况 - 我不明白。

我想在我的asp.net应用程序下运行该作业,而无需创建额外的Windows服务,因此任何帮助都将非常感激。下面是我的quartz.net配置文件的片段。

<job>
<job-detail>
  <name>xjob</name>
  <group>MyJobs</group>
  <description>blah blah</description>
  <job-type>yyy.xxx,yyy</job-type>
  <volatile>false</volatile>
  <durable>true</durable>
  <recover>false</recover>      
</job-detail>
<trigger>
  <cron>
    <name>xJobTrigger</name>
    <group>MyJobs</group>
    <description>blah blah</description>
    <job-name>xJob</job-name>
    <job-group>MyJobs</job-group>
    <cron-expression>0 0 1 * * ?</cron-expression>
  </cron>      
</trigger>

谢谢

1 个答案:

答案 0 :(得分:1)

我认为有一些事情正在发生。正如您所提到的,如果您在asp.net下运行调度程序,则该进程可能会被回收,并且您的调度程序可能无法在应该运行时运行该作业。如果在给定时间运行作业很重要,那么您需要将Quartz.net设置为服务。

缺少的另一件事是我认为你正在使用RAM作业,这意味着当调度程序重新启动时,它会重新安排作业,因此在你的情况下,它将不会再次触发,直到1.如果调度程序如果未在1运行,则即使调度程序重新启动(等等),作业也不会触发。如果您使用ADO作业存储,那么至少触发器将保持不变,并且一旦调度程序再次启动并且检测到失火,作业将会运行。