如果网站处于非活动状态,asp.net cron jobs就不会运行

时间:2015-12-17 10:49:36

标签: c# asp.net-mvc cron

好吧,我有一份工作,每30分钟就会运行一次。 Quartz.net代码:

   ITrigger trigger = TriggerBuilder.Create()
                          .WithDailyTimeIntervalSchedule
                            (s =>
                               s.WithIntervalInMinutes(30)
                               .OnEveryDay()
                              .StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(0, 0))
                            )
                          .Build();

Hangfire代码:

  RecurringJob.AddOrUpdate(() => DoSomething(), "*/30 * * * *");

这两种方法都可以在本地工作,但在生产服务器上如果网站处于非活动状态,例如2-3小时的工作不再触发。但如果我去我的网站下一个工作将触发。有什么解决方案吗?我要在iis上改变一些东西,还是可以用代码解决问题?

1 个答案:

答案 0 :(得分:1)

每个应用程序池都定义了空闲超时。如果超时过去且没有向应用程序发出请求,IIS将停止工作进程并卸载应用程序。

由于您将作业频率设置为30分钟且默认空闲超时为20分钟,因此我强烈怀疑这是您的问题。

你可以configure the idle timeout in IIS Manager

  
      
  1. 打开IIS管理器。
  2.   
  3. 在“连接”窗格中,展开服务器节点,然后单击“应用程序池”。
  4.   
  5. 在“应用程序池”页面上,选择要为其指定空闲超时设置的应用程序池,然后单击“操作”窗格中的“高级设置”。
  6.   
  7. 在“空闲超时(分钟)”框中,键入分钟数,然后单击“确定”。
  8.