3

我有一份工作,我想每十分钟运行一次。为了安排它,我使用:

public static IScheduler _scheduler { get; private set; }

...

        ISchedulerFactory schedFact = new StdSchedulerFactory();
        _scheduler = schedFact.GetScheduler();
        _scheduler.Start();

        string cron = "0 0/10 * 1/1 * ? *";

        JobKey jobkey = new JobKey("Radar", "F");
        IJobDetail job = JobBuilder.Create<RadarJob>()
                                    .WithIdentity(jobkey)
                                    .Build();

        CronScheduleBuilder csb = CronScheduleBuilder.CronSchedule(new CronExpression(cron)).InTimeZone(TimeZoneInfo.Local);
        ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create()
                                                            .WithIdentity("Radar-Trigger", "G")
                                                            .WithSchedule(csb)
                                                            .Build();
        try
        {
            DateTimeOffset ft = _scheduler.ScheduleJob(job, trigger);
            Response.Write("Job Scheduled");
        }
        catch (ObjectAlreadyExistsException)
        {
            Response.Write("Job Already Exists!");
        }

起初它似乎工作,工作每十分钟运行一次。但是,大约一个小时后,它停止运行。我记录成功和错误,我没有错误。是什么导致我的工作自行停止?

我正在使用 GoDaddy 的共享主机计划运行 IIS 7、.NET Framework 4.0。

4

2 回答 2

4

您的作业正在 IIS AppPool 中运行。池可能正在回收,这将终止石英任务,并且 IIS 不会自动重新启动它(因为它确实会重新启动池回收时正在处理的 Web 请求)。

(我假设您在 Global.asax 文件的 Application_Start() 中运行上述代码。)

我们遇到了这种情况,并决定将石英用作不受池回收影响的独立服务,但我不确定这对于您在共享托管计划下是否可行。

您表明您在 IIS 7 上运行。如果实际上这是 IIS 7.5,则在 IIS7 自动启动时 Auto-Start application / global.asax / wcf 服务中可能有更好的解决方案,即配置应用程序池自动重启。

于 2013-05-28T17:36:15.750 回答
1

回答晚了,但我的申请中出现了这种错误。我通过在 Scott Gu 博客中找到的 IIS 配置解决了它:http ://weblogs.asp.net/scottgu/auto-start-asp-net-applications-vs-2010-and-net-4-0-series

于 2016-02-15T07:51:45.540 回答