2016-10-18 2 views
0

Я запланировал cron Job в .NET и тот же самый размещен в IIS. В первый день, когда он был запущен (для целей тестирования я действительно отправляю почту, когда это задание запускается). Но на следующий день это не так (я хочу, чтобы это было рекурсивным на ежедневной основе ... каждые 24 часа один раз). Пожалуйста, найдите код ниже. [! [Введите описание изображения здесь] [1]] [1]Cron Job (Quartz.NET) в .NET не запускается ежедневно

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

Некоторые из любезно предоставили помощь по этому вопросу.

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

Я просто хочу, чтобы эта работа выполнялась ежедневно утром 11:42 утра. Я был бы благодарен за любую помощь в этом отношении

Приложение создано на ASP.NET MVC и размещено на IIS. Я хочу, чтобы работа выполнялась ежедневно, поэтому я выбираю Cron Job (служба Windows не соответствует контексту/области на моем рабочем сервере)

+2

Я думаю, что это связано с IIS, потому что он через некоторое время перезаработает пул приложений, и ваша работа больше не будет запускаться. Вы используете для этого статический класс? Долгосрочная задача не должна запускаться в IIS больше во внешней службе или так – Jehof

+0

Я согласен с Jehof, возможно, с переработкой IIS. Когда вы называете этот метод Start()? Требуется ли вам сделать что-то вручную, т.е. Вызовите услугу? – CathalMF

+0

Спасибо Jehof & CathalMF за ваш быстрый ответ. Да, мы будем называть службу (REST API) для публикации данных. Это должно происходить ежедневно – suman

ответ

4

IIS имеет функцию «Переработка». Это в основном перезагружает все в IIS.

Если вы идете в Дополнительные настройки вашего пула приложений в диспетчере IIS есть интервал Recycling, который по умолчанию составляет 1740 минут (29 часов)

Когда IIS Recycles ваше приложение не будет начинать не работает, пока что-звонков веб-сервис. Поэтому каждые 29 часов он будет перерабатываться, поэтому в зависимости от того, когда вы запустили свой веб-сервис, он будет запускать ваше задание Cron один или два раза, но никогда в третий раз, если вы не вызвали ваш веб-сервис после перезагрузки, чтобы перезапустить его.

В принципе, IIS не является хорошим местом для размещения приложения, которое должно всегда выполняться заданиями.

+2

. Существуют и другие причины для повторного использования пула приложений IIS, например, быстрая защита от сбоев (после настраиваемого количества необработанных исключений) или переработка после настраиваемого количества запросов ... для его получения надежный, таймеры, безусловно, должны размещаться в специализированном сервисе. – dlatikay

+0

Спасибо CathalMF за ваш ответ. Итак, вы хотите сказать, что CRON Job - это не очень хорошая идея сделать это на IIS ??? Я выбрал это, потому что у меня нет прав/прав (услуга Windows или работа sql на моем рабочем сервере). Пожалуйста, предложите – suman

+0

@suman Как насчет простой задачи по планированию Windows? – CathalMF

Смежные вопросы