.NET中的Cron Job(Quartz.NET)不会每天触发

sum*_*man 0 c# quartz.net

我已经在.NET中安排了cron Job,并且在IIS中托管了该任务。在它触发的第一天(出于测试目的,我实际上在触发此作业时发送邮件)。但是第二天还没有(我希望每天进行递归……每24小时一次)请在下面找到代码。[![在此处输入图片描述] [1]] [1]

public class JobScheduler
{
    public static void Start()
    {
        try
        {
            Logger.Error("-------------------------------------------Inside JobScheduler Start-------------------------------------------");

            IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();
            scheduler.Start();

            IJobDetail job = JobBuilder.Create<QualityGateSFDCActionJob>().Build();

            ITrigger trigger = TriggerBuilder.Create().WithIdentity("trigger3", "group1").WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(11, 42)).ForJob(job).Build();

            scheduler.ScheduleJob(job, trigger);

            Logger.Error("-------------------------------------------Scheduler Started without Issues-------------------------------------------");
        }
        catch (Exception ex)
        {
            Logger.Error(ex.Message);
            throw ex;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

一些对此的帮助。

ITrigger trigger = TriggerBuilder.Create().WithIdentity("trigger3", "group1").WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(11, 42)).ForJob(job).Build();
Run Code Online (Sandbox Code Playgroud)

我只希望这项工作每天早上11:42运行。非常感谢您在这方面的帮助

应用程序基于ASP.NET MVC构建,并托管在IIS上。我希望每天运行一份作业,这就是为什么我选择Cron Job(Windows服务在生产服务器中不在上下文/范围内)的原因

Cat*_*lMF 5

IIS具有称为“回收”的功能。基本上,这将重新加载IIS中的所有内容。

如果您在IIS管理器中进入“应用程序池”的“高级设置”,则存在一个“回收间隔”,默认为1740分钟(29小时)

当IIS回收时,您的应用程序将在某些调用Web服务之前开始运行。因此,它每29小时就会循环一次,因此,取决于您启动Web服务的时间,它将运行您的Cron作业一次或两次,但绝不会第3次运行,除非您在回收之后调用了Web服务以重新启动它。

基本上,IIS并不是托管需要始终运行作业的应用程序的好地方。

  • IIS应用程序池也有其他原因可以回收,例如快速故障保护(在可配置数量的未处理异常之后)或在可配置数量的请求后回收...为了使其可靠,计时器肯定应该托管在其中专门的服务流程。 (2认同)