Проблема при запуске бизнес процесса с помощью планировщика.

Добрый день. Возникла необходимость запускать единоразово БП в указанное время. Задание для планировщика добавляется (появляется в бд), но не срабатывает в указанное время. В бд можно увидеть, что задание остаётся по-прежнему в режиме ожидания (устанавливал запуск через 5 минут при тесте). Ниже код, добавляющий задание для планировщика. В чём может быть проблема?
 

            
startDateTime = startDateTime.AddHours(-3);
string jobName = string.Format(jobNameTemplate, id);
 
var parameters = new Dictionary<string, object>();
parameters.Add("Id", id.ToString());
AppScheduler.RemoveJob(jobName, jobGroupName);
var job = AppScheduler.CreateProcessJob(
     jobName, 
     jobGroupName, 
     processName, 
     userConnection.Workspace.Name, 
     userConnection.CurrentUser.Name,
     parameters);
 
string cronExpresson = string.Format("{0} {1} {2} {3} {4} ? {5} ", 
    dt.Second, dt.Minute, dt.Hour, 
    dt.Day, dt.Month, dt.Year);
 
var trigger = new CronTriggerImpl(
     jobName + "Trigger", 
     jobGroupName, 
     cronExpresson);
 
trigger.MisfireInstruction = MisfireInstruction.CronTrigger.DoNothing;
trigger.TimeZone = TimeZoneInfo.Utc;
 
AppScheduler.Instance.ScheduleJob(job, trigger);

 

 

Нравится

4 комментария

У меня была такого рода проблема, ниже привожу ответ с поддержки:

 

Описанное поведение может возникать из-за некорректных настроек пула приложения в IIS. Как следствие процесс не запускается по расписанию, так как планировщик на прямую связан с пулом.

Для того, чтобы убедится в этом достаточно создать процесс с 1 элементом таймер. Указать в таймере 10 сек. Запустить процесс. Если по истечению времени (10 сек) экземпляр процесса (в журнале процессов) по прежнему находится в состоянии “Выполняется” (не “Завершен”) – необходимо настроить удостоверение в свойствах пула.

В расширенных настройках пула в параметре Удостоверение (identity) необходимо указать пользователя, от имени которого запущен IIS

Советы по конфигурированию выявленные опытным путем:

1) Использовать отдельный пул для каждого приложения в рамках отдельного IIS сервера.

2) В настройке пула Identity задать значение LocalSystem

в правах NTFS на каталог приложения - должна присутствовать роль SYSTEM (СИСТЕМА) и иметь полынье права, рекурсивно включая все вложенные каталоги.

3) В конфигурационном файле ConnectionStrings необходимо установить авторизацию по конкретному пользователю

 (желательно создать отдельного пользователя SQL (авторизация средствами SQL-сервера, т.е. не пользователь ОС) имеющего права владельца на БД используемую приложением)

режим "сквозной авторизации" через пользователя ОС (Integrated Security=SSPI (атрибут узла add name="db" в теге connectionStrings))

вызывает проблемы с планировщиком, лучше использовать прямую авторизацию пользователем SQL-сервера.

 

Методику проверки, Вам подсказывают верно:

необходимо создать БП в котором между точками старта и окончания необходимо разместить элемент "Таймер" (на одну или несколько секунд задержки).

после сохранения такого БП, принудительно вызвать его на исполнение, после чего в журнале БП убедиться что БП успешно выполнился, а не находится в состоянии "Выполняется" или "Ошибка"

Шарипов Ильмир Ирекович,

Проверил. Сегодня утром тестовый таймер работал. И начал срабатывать вызов моего процесса. Но спустя некоторое время всё вернулось к прежнему состоянию. Таймер тоже перестал работать. Видимо проблемы связаны с перегруженностью планировщика, хоть и задач у него немного. Пока что решилось изменением настроек Quartz в конфиге загрузчика. Первой строки изначально вообще не было, во второй значение было равным 5. 

<add key="quartz.scheduler.batchTriggerAcquisitionMaxCount" value="5" />
<add key="quartz.scheduler.threadCount" value="10" />

 

Чтобы запустить планировщик после перезапуска вэб-приложения, нужно зайти именно на страницу логина. То есть пока кто-нибудь не зайдет на страницу логина, планировщик не запустится. Планировщик живет в верхнем квадратике. Если пользователь аутентифицирован до перезапуска вэб-приложения, то можно сразу выйти на страницы .../0/..., но это не запустит планировщик.

 

 

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