Error occurred when saving: The Scheduler has been Shutdown - получаю такую ошибку когда пробую опубликовать БП, происходит часто, после того как начали использовать фоновые таски, помогает рестарт сайта.

 

7.18.5 .net core

Нравится

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

Добрый день!

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

логика точно не при чем.

в какие логи смотреть конкретно? 

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

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

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

Эти процессы спокойно перенеслись через SVN на другие дев стенды и на QAS - и там начали работать по расписанию.

Но, когда перенесли наш пакет с помощью WorkspacecConsole, то на целевой среде они не запускаются по расписанию. Стартовые сигналы в таблице SysStartTimerInProcess появились, но триггеров в QRTZ_TRIGGERS нет.  Запускал вручную - они отлично отрабатывают, но далее по расписнию все равно не работают (триггеров по-прежнему нет).

В процессе установлена галка Повторять при пропуске.

Еще такой момент: на целевой среде, куда переносим пакет с помощью WsC - SalsesEnterprise, а на девах и QAS какая-то более сложна сборка с маркетингом и  сервисом. Версия везде 7.11.3.1175

 

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

Прикрепленные файлы

Нравится

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

Добрый день, Андрей!

При установке пакета через WorkspaceConsole необходимо перезапустить пул приложения и очистить Redis, для того что бы подтянулись изменения. 

В других механизмах установки пакетов эти изменения прописаны и выполняются автоматически. 

Tsopa,

Добрый день. Что сделал:

  1. Выключил пул приложений
  2. Установил пакет с помощью WorkspaceConsole
  3. Почистил redis
  4. Включил пул 
  5. Убедился, что в QRTZ_TRIGGERS триггеров нет
  6. Залогинился и сделал Генерировать исходные коды для всех
  7. Сделал компилировать все
  8. После этого в QRTZ_TRIGGERS появились нужные трриггеры
Показать все комментарии

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

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

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

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

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

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

Версия 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 (при создании джоба).

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

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

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

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

Коллеги, добрый день.

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

Есть бизнес- процесс, который в числе прочих действий генерирует печатную форму и отправляет её по Email как аттачмент.

Если запускать этот БП вручную, он успешно отрабатывает. При вызове из задания (QuartzScheduler) - падает на шаге генерации ПФ.

ПФ генерируется в ScriptTask с помощью вызова ReportService:

var reportData = reportService.GenerateMSWordReport(templateId, recordId, convertInPDF);

Шаг падает со следующим Exception:

System.NullReferenceException: Object reference not set to an instance of an object.
   at Terrasoft.Configuration.ReportService.ReportService..ctor()
   at Terrasoft.Core.Process.UsrOutdatedTSActNotif.ScriptTask2Execute(ProcessExecutingContext context)
   at Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context)

Нравится

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

Здравствуйте, вероятно при работе планировщика нет userconnection-а, попробуйте из стороннего c# кода вызвать свой бп с формированием отчета:
https://academy.terrasoft.ru/documents/technic-sdk/7-7-0/zapusk-process…
если получится, то сделайте бп который будет работать по планировщику, и вызывать таким же образом образом другой бп с формированием отчета.
Такой вызов должен эмулировать нормальный заход пользователя на сайт (авторизация) и запуск процесса как бы в ручном режиме.

Илья,
большое спасибо, помогло.

Единственный минус - в таком случае придётся заводить служебного пользователя для поторяющизся задач и хранить где-то его логин/пароль в открытом виде.

Возможно есть какой-то более простой способ получить UserConnection в БП, запускаемом из Quartz?

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

В создании дополнительно пользователя нет необходимости.
Будет подтягиваться userconnection пользователя, которого вы укажите при создании job’а.
Условно:

string userName = userConnection.CurrentUser.Name;
AppScheduler.ScheduleMinutelyProcessJob(schedulerJobName, schedulerJobGroupName, jobProcessName, solutionName, userName, minutleyInterval, isSystemUser : true);

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