Запуск процессов по расписсанию

Здравствуйте.
Подскажите пожалуйста, в чем может быть проблема. Планирую запуск процесса кодом:

string processName = "UsrSendingReportMailByDayProcess";
//DateTime jobStartTime = new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day + 1, 19, 0, 0);
AppScheduler.RemoveJob(processName + "Job","Main");
IJobDetail job = AppScheduler.CreateProcessJob(processName + "Job",
                                        "Main", processName, "Default", context.UserConnection.CurrentUser.Name);
//ITrigger trigger = new SimpleTriggerImpl(processName + "Trigger", "Main", jobStartTime);
ITrigger trigger = new CronTriggerImpl(processName + "Trigger", "Main", "0 0 19 ? * *"); //Каждый день в 19:00
AppScheduler.Instance.ScheduleJob(job, trigger);
return true;

Запланирован 22.11, процесс запускался 22.11 -26.11 точно в 19:00, завершался без ошибок. Далее в журнале процесса запусков не зафиксированно, но таблицах QRTZ_JOB_DETAILS, QRTZ_TRIGGERS записи о этом задание есть. В QRTZ_TRIGGERS в поле [PREV_FIRE_TIME] указанно время 28.11 19:00, т.е. триггер и джоб не пропал и выполнился, но процесс не запустился.
До этого были выполнены рекомендации из темы https://community.terrasoft.ru/forum/topic/12848
Также была установлена утилита о которой говориться в теме.

В системном журнале не зафиксированн перезапуск сервера или IIS. Единственное есть запись с уровнем "Свединие" в день когда процесс перестал запускаться: "Рабочий процесс с идентификатором процесса "4904", обслуживающий пул приложений "BPMonline", запросил повторный запуск, так как в рабочем процессе достигнут предел допустимого времени обработки."
До этого использовался запуск процесса в который планировался закоментированным выше кодом, но через несколько дней повторялась таже проблема.
Подскажите на что стоит обратить внимание. Может у кого наблюдалась подобная проблема?

Нравится

11 комментариев

Здравствуйте!

Рекомендую посмотреть логи приложения за дату, когда процесс не выполнился. Обратите внимание на файл Scheduler - именно в него пишутся логи Quartz. Исходя из сообщений можно определить причину такого поведения.

Алексей, спасибо.
Нашел ошибку "Object reference not set to an instance of an object."
Лог:
2016-11-27 19:00:00,133 [BPMonlineQuartzScheduler_Worker-1] INFO IIS APPPOOL\BPMonline Terrasoft.Core.Scheduler.RunProcessJob Execute - ProcessStart [processSchemaName:UsrSendingReportMailByDayProcess, processElementUId , userName:dmkrotov, workspaceName:Default, workspaceBaseUrl:http://crm.euro-stan.com:88/, timeZoneId:]
2016-11-27 19:00:00,149 [BPMonlineQuartzScheduler_Worker-1] INFO IIS APPPOOL\BPMonline Terrasoft.Core.Scheduler.RunProcessJob Execute - ProcessFail [processSchemaName:UsrSendingReportMailByDayProcess, processElementUId , userName:dmkrotov, workspaceName:Default, workspaceBaseUrl:http://crm.euro-stan.com:88/, timeZoneId:, Exception:System.NullReferenceException: Object reference not set to an instance of an object.
at Terrasoft.Core.ManagerItemCollection`1.FindByUId(Guid uid)
at Terrasoft.Core.Process.ProcessSchemaManager.FindInstanceFromMetaData(Guid schemaUId)
at Terrasoft.Core.SchemaManager`1.GetInstanceFromMetaData(Guid schemaUId)
at Terrasoft.Core.Process.ProcessSchemaManager.GetIsCreatedInInterpretableVersion(ISchemaManagerItem`1 managerItem)
at Terrasoft.Core.Process.ProcessSchemaManager.GetCanUseFlowEngine(UserConnection userConnection, ISchemaManagerItem`1 managerItem)
at Terrasoft.Core.Scheduler.RunProcessJob.RunProcess(UserConnection userConnection, String processSchemaName, JobDataMap dataMap, Dictionary`2 predefinedEntries)
at Terrasoft.Core.Scheduler.RunProcessJob.Execute(IJobExecutionContext context)]

Подскажите в следствии чего возникает данная проблема? После планирования процесса он несколько дней запускается исправно, а потом насколько я понимаю "слетают ссылки". После того как запланировал еще раз, процесс запустился в назначенное время.

Здравствуйте!

Попробуйте скомпилировать приложение. Последующий запуск процесса пройдет корректно. Уточните, пожалуйста, какая у вас версия?

Версия 7.7.0.2284

Тех. поддержка ответила: "Трудно определить источник проблемы “Object reference not set to an instance of an object.” без отладки. Описанное поведение могло возникнуть:
а) в момент запуска процесса – пул приложения выключен
б) после ручного перезапуска сайта некорректно генерировался исходный код

Обе проблемы исправлены в версии 7.8. Для решения задачи необходимо обновить приложение до последней релизной версии 7.8."

Насколько я понял, после перезапуски сайта\пула, нужно скомпелировать и сгенерировать код.

Здравствуйте!

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

Что значит обновить приложение?

Добрый день!
Подразумевается обновить приложение с версии 7.7 до 7.8.4 или 7.9.
На академии есть инструкция по обновлению - https://academy.terrasoft.ua/documents/instrukciya-po-obnovleniyu-bpmon…
У поддержки можно запросить необходимые дистрибутивы.

Добрый день!

Коллеги, может кто-то знает, чем гарантируется (если гарантируется) запуск процесса через планировщик Quartz?

Например, рассмотрим кейс, когда на следующую неделю на среду на 17:00 через планировщик запланирован запуск некоторого бизнес-процесса.

Начиная с вечера пятницы предыдущей недели никто в системе до четверга следующей недели не работал (предположим, были такие длинные праздники). Получается, что в системе никто не работает пятница - четверг. Будет ли в таком случае запущен бизнес-процесс по расписанию в среду в 17:00?

Ведь, процесс w3wp.exe, по всей видимости, будет перезапущен в этом периоде несколько раз? Пусть, для простоты, мы говорим только про on-cloud.

Здравствуйте, Андрей!

Без дополнительных настроек процесс запущен не будет. Для решений on-demand (cloud) используется сервис, который каждые 5 минут "опрашивает" главную страницу. Это позволяет "разбудить" приложение, если пул приложения был перезапущен (у IIS есть свойство перезапускаться каждые сутки).

Для решения on-site есть ряд утилит, которые выполняют аналогичное действие. Пример утилиты можно найти на msdn:
https://social.msdn.microsoft.com/Forums/en-US/8b3258e7-261c-49a0-888c-…

Алексей, спасибо за подробный ответ!

Правильно ли я понимаю, что в момент запуска домена приложения, например при "пинге" как вы указали по ссылке выше, запускается процесс w3wp и планировщик QUARTZ запустит и отработает все "просроченные" задачи, не выполненные из-за того, что активных сессий с момента перезапуска IIS не было?

Здравствуйте!
Все верно. Job'ы в планировщике, которые не отработали вовремя изменяют свое состояние, становятся в очередь и ожидают запуска пула приложения.

Показать все комментарии