【问题标题】:Quartz.NET job configurared to run once daily works the first day but fails to fire on subsequent days配置为每天运行一次的 Quartz.NET 作业在第一天工作,但在随后几天无法触发
【发布时间】:2012-05-23 05:38:09
【问题描述】:

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

我希望在我的 asp.net 应用程序下继续运行该作业,而无需创建额外的 Windows 服务,因此将不胜感激。下面是我的quartz.net 配置文件的sn-p。

<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>

谢谢

【问题讨论】:

    标签: asp.net scheduling quartz.net


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的回复 - 非常感谢。如果进程被回收,为什么当我在 2 分钟内更改运行特定作业的时间时,作业运行而无需向站点发出请求或不必启动任何东西?这是一致的。我将研究 ADO 存储 - 我没有意识到 RAM 存储就是这种情况。谢谢。
    • 如果没有任何细节,我猜想当您重新安排作业时该进程正在运行并且它会保持 2 分钟。您可以通过安排作业在 24 小时后运行或其他方式来测试这一点。如果 IIS 回收的时间间隔短于您的作业延迟,则它永远不会运行。
    猜你喜欢
    • 2023-03-04
    • 1970-01-01
    • 2014-08-14
    • 1970-01-01
    • 2015-07-15
    • 1970-01-01
    • 2011-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多