我有一份工作,我想每十分钟一次。为了安排它,我使用:
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!");
}
一开始似乎工作,这项工作每十分钟运行一次。但是,大约一个小时后,它就会停止运行。我记录成功和错误,我没有错误。是什么导致我的工作单独停止?
我正在运行IIS 7,.NET Framework 4.0,使用GoDaddy的共享托管计划。
答案 0 :(得分:3)
您的工作正在IIS AppPool中运行。该池可能正在回收,这将终止石英任务,IIS将不会自动重启它(因为它会重新启动池回收时正在处理的Web请求)。
(我假设您在Global.asax文件中运行Application_Start()中的上述代码。)
我们遇到过这种情况并决定使用quartz作为独立服务,不受池回收的影响,但我不确定这是否适合您在共享主机方案下的选择。
您表明您在IIS 7上运行。如果实际上这是IIS 7.5,则Auto-Start application / global.asax / wcf service when IIS7 starts automatically中可能会有一个更好的解决方案,即配置应用程序池以自动重新启动。
答案 1 :(得分:1)
这回答迟到但我的应用程序中出现了这种错误。我通过IIS配置解决了这个问题,我在Scott Gu博客中找到了它:http://weblogs.asp.net/scottgu/auto-start-asp-net-applications-vs-2010-and-net-4-0-series