Не запускаются по расписанию бизнес-процессы

Коллеги, требуется помощь!

Программирую регулярное выполнение бизнес-процесса через планировщик таким образом:

первый элемент бизнес-процесса проверяет наличие триггера, и в случае отсутствия - создаёт триггер в БД. Т.е. при первом ручном запуске БП - он формирует себе "расписание" последующих запусков.

Пробовал использовать несколько способов, но все они не работают, в Библиотеке БП процесс присутствует, триггеры в БД заводятся. Но последующих запусков не происходит.

В чём может быть причина?

Доп. инфоормация:

Версия BPM 7.7 Bank Customer Journey. БД Oracle.

Триггеры находятся в состоянии WAITNG.

Пользователь для выполнения системных операций (SystemUser) Supervisor.

IIS перезапускал. Application Pool находится в режиме Универсальный.

Способы, которые я пробовал использовать:

CronTriggerImpl:

var cronExp = "0 0/5 * ? * * *";
 
if (!AppScheduler.DoesJobExist(jobName, jobGroup))
{
	var job = AppScheduler.CreateProcessJob(jobName, jobGroup, procName, userConnection.Workspace.Name, userConnection.CurrentUser.Name);
	var trigger = new CronTriggerImpl(jobName + "Trigger", jobGroup, cronExp);
	AppScheduler.Instance.ScheduleJob(job, trigger);
}

 

CronTriggerImpl:

var cronExp = "0 0/5 * ? * * *";
 
if (!AppScheduler.DoesJobExist(jobName, jobGroup))
{
	var job = AppScheduler.CreateProcessJob(jobName, jobGroup, procName, userConnection.Workspace.Name, userConnection.CurrentUser.Name);
	var trigger = new CronTriggerImpl(jobName + "Trigger", jobGroup, cronExp);
 
	trigger.MisfireInstruction = MisfireInstruction.CronTrigger.FireOnceNow;
	trigger.TimeZone = TimeZoneInfo.Utc;
 
	AppScheduler.Instance.ScheduleJob(job, trigger);
}

 

ScheduleMinutelyProcessJob:

int periodInMinutes = 3;
 
if (!AppScheduler.DoesJobExist(jobName, jobGroup))
{
	AppScheduler.ScheduleMinutelyProcessJob(jobName, jobGroup, procName,
		userConnection.Workspace.Name, userConnection.CurrentUser.Name, periodInMinutes);
}

 

SimpleTriggerImpl:

int startOffset = 4;
 
if (AppScheduler.DoesJobExist(jobName, jobGroup))
{
   AppScheduler.RemoveJob(jobName, jobGroup);
}
 
var job = AppScheduler.CreateProcessJob(jobName, jobGroup, procName, userConnection.Workspace.Name, userConnection.CurrentUser.Name);
var trigger = new SimpleTriggerImpl(jobName + "Trigger", jobGroup, DateTime.UtcNow.AddMinutes(startOffset));
AppScheduler.Instance.ScheduleJob(job, trigger);

 

SimpleTriggerImpl от системного пользователя:

int startOffset = 4;
 
if (AppScheduler.DoesJobExist(jobName, jobGroup))
{
   AppScheduler.RemoveJob(jobName, jobGroup);
}
 
var job = AppScheduler.CreateProcessJob(jobName, jobGroup, procName, userConnection.Workspace.Name, userConnection.CurrentUser.Name, null, true);
var trigger = new SimpleTriggerImpl(jobName + "Trigger", jobGroup, DateTime.UtcNow.AddMinutes(startOffset));
AppScheduler.Instance.ScheduleJob(job, trigger);

 

При использовании всех вариантов - триггеры создаются в БД, но повторно не срабатывают. Куда копать?

Нравится

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

сайт пингуется периодически? (там вроде как пул приложений засыпает периодически, если пользователи долго не работают, и триггеры отваливаются)

Сайт пингуется. Так же есть уже заведённые (не мной, до меня) Job'ы c триггерами, которые регулярно запускаются с периодичностью в 2 минуты. Мои же триггеры не запускаются

Может, оно попыталось запуститься и свалилось. Иногда можно понять, глядя в базе на записи об этих триггерах в таблицах с названиями, начинающимися с QRTZ. Может, там найдутся подробности о произошедшем или видно разницу с нормально работающим.

Для контроля запускал такой скрипт (БД Oracle) -



SELECT sched_name,

       trigger_group,

       job_name,

       job_group,

       trigger_state,

         TO_DATE ('03-jan-0001', 'dd-mon-yyyy')

       + next_fire_time / (10000000 * 60 * 60 * 24)

           AS next_fire_time,

       TO_DATE ('03-jan-0001', 'dd-mon-yyyy')

       + prev_fire_time / (10000000 * 60 * 60 * 24)

           AS prev_fire_time

  FROM qrtz_triggers

он показывает что у моих триггеров prev_fire_time - пустое, а next_fire_time, к примеру, "28.11.2017 8:41:49".  У работающих же триггеров - оба значения заполнены, и примерно например, prev_fire_time: "28.11.2017 8:40:48"

 

 

Проверьте что бы название (не заголовок) целевых процессов совпадал со значением в переменной procName (при создании джоба).

Если не поможет напишите в тех. поддержку.

Олег, спасибо)

Вроде перепроверил заголовки. Уже !!! параллельно написал в поддержку платную. Давайте вместе найдём в чём затык!

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