Всем доброго времени суток!

 

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

 

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

 

Может где-то есть настройки работы таймера, чтобы проверить, все ли корректно работает и сравнить с тестовой платформой? Заранее благодарю!

Нравится

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

Я бы посмотрел в сторону Quartz, возможно с ним какие-то проблемы https://academy.terrasoft.ru/docs/developer/elements_and_components/qua…

 

Для начала увеличить значение в веб конфигах на более высокое (по умолчанию там 5), затем перезапустить iis.

<add key="quartz.threadPool.threadCount" value="5" />

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

Есть вероятность что таймеры попадают на то время когда пул приложения спит, тут может помочь настройка согласно публикации https://community.terrasoft.ru/articles/bespereboynaya-rabota-zadaniy-q…

 

Но в целом что стоит сравнить так это внешний Web.config с обеих сред. Возможно достаточно будет их заполнить одинаково, или если у вас на прод среде в разы больше задач для Quartz может понадобится настройка согласно статье https://academy.terrasoft.ru/docs/7-17/developer/elements_and_component…

 

Если это не поможет, было бы неплохо уточнить формулировку "журнале событие есть, схема точно рабочая, но никаких действий вовсе нет" не совсем понятно что именно тут происходит, а что нет.

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

Добрый день!

Два вопроса по таймеру в процессах:

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

2. Можно ли задавать время запуска в системных настройках?

Нравится

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

Настройки для работы системы берутся из настроек ОС где устанавливается система и настроек часового пояса в ней. Так как в большинстве случаев администраторы ОС пренебрегают настройками часового пояса при установке системы, то я бы посоветовал обратить внимание для начала туда. А настройка часового пояса по умолчанию производится в системной настройке "Часовой пояс по умолчанию", но она все же больше сделана для настройки работы календаря и связанных с ней частей системы.

А зачем тогда настройка часового пояса в стартовом сигнале процесса Timer?
 

Владимир Соколов,

Добрый день!

Можно задавать время в формате UTC для таймера, тогда вопросов с часовыми поясами вообще не будет.

 

Подобные примеры доступны в статьях на академии: 

https://academy.terrasoft.ua/docs/user/biznes_processy/primery_nastrojk…

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

Всем привет!

 

Есть БП довольно простой. 

До таймера все работает как положено, а после таймера ничего не происходит.

Без таймера все работает отлично, но он тут очень необходим.

Нравится

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

Михаил, причины могут быть различными.

Например,  если есть большое количество процессов, которые используют таймер (и, следовательно, планировщик), то может быть, сейчас очередь планировщика перегружена, что и могло вызвать проблемы с зависанием процессов. В таком случае нужно увеличить threadCount во внешнем Web.config с 5, например, до 10. Стандартно там:

<add key="quartz.threadPool.threadCount" value="5" />

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

Михаил, подскажите, пожалуйста, удалось ли решить проблему.

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

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

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

Можно ли такое сделать?

В данный момент в начало процесса добавили проверку, которая уводит процесс в завершение, но через 10 минут он запускается снова. А хотелось бы уйти от этих "пустых" запусков.

 

Нравится

5 комментариев
Лучший ответ

Снимайте признак активный с БП

Снимайте признак активный с БП

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

Савельева Анастасия,

а как отлавливать этот сигнал?

Коновалов Игорь пишет:

Снимайте признак активный с БП

А в каком объекте этот признак присутствует? 

Вижу в базе отдельный объект SysProcessDisabled. См. тут.

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

Перестали запускаться БП по таймеру. В логах вижу

2018-03-16 10:00:38,970 [BPMonlineQuartzScheduler_Worker-1] ERROR CP-BPM2\bpmadmin Terrasoft.Core.Scheduler.ProcessJobStub Execute - Cross-domain process launch for workspace "Default" ended abnormally
System.AppDomainUnloadedException: The application domain in which the thread was running has been unloaded.

Server stack trace: 
   at System.Threading.Thread.InternalCrossContextCallback(Context ctx, IntPtr ctxID, Int32 appDomainID, InternalCrossContextDelegate ftnToCall, Object[] args)
   at System.Runtime.Remoting.Channels.CrossAppDomainSink.DoTransitionDispatch(Byte[] reqStmBuff, SmuggledMethodCallMessage smuggledMcm, SmuggledMethodReturnMessage& smuggledMrm)
   at System.Runtime.Remoting.Channels.CrossAppDomainSink.SyncProcessMessage(IMessage reqMsg)

Exception rethrown at [0]: 
   at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
   at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
   at Terrasoft.Core.Scheduler.ProcessJobProxy.Execute(IWebAppJob job, IJobExecutionContext context)
   at Terrasoft.Core.Scheduler.ProcessJobStub.Execute(IJobExecutionContext context)

 

Что это такое? Почему? И как с этим быть?

Нравится

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

Не помогает даже ребут сервера

2018-03-16 10:40:44,066 [9] INFO  CP-BPM2\bpmadmin Quartz.Core.QuartzScheduler Initialize - Scheduler meta-data: Quartz Scheduler (v2.3.2.0) 'BPMonlineQuartzScheduler' with instanceId 'auto'
  Scheduler class: 'Quartz.Core.QuartzScheduler' - running locally.
  NOT STARTED.
  Currently in standby mode.
  Number of jobs executed: 0
  Using thread pool 'Quartz.Simpl.SimpleThreadPool' - with 5 threads.
  Using job-store 'Quartz.Impl.AdoJobStore.JobStoreTX' - which supports persistence. and is clustered.
 

Алексей, добрый день!

Для решения нужно анализировать логи приложения. Рекомендую Вам обратиться в техническую поддержку.

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

Неистово глючит стартовый таймер. Уже нашел, что он не работает в компилируемом процессе.

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

В итоге процесс таймера запустился и висит в состоянии Выполняется. При этом ни на диаграмме, ни на странице процесса нет ни одного выполненного элемента.

Что с этим можно сделать?

Нравится

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

Алексей, здравствуйте!

Запуск компилируемых процессов по стартовому таймеру реализован в версии 7.11.3 и выше.

По поводу элемента Генерация сообщения, данный элемент работает в рамках отдельного экземпляра процесса, подробнее на Академии. Обработать сигнал в другом процессе не удастся.

Для версии 7.11.2 Вы можете при необходимости в элементе Задание-сценарий в расширенных настройках снять признак Для интерпретируемого процесса, снять признак Компилируемого процесса и выполнить деактивацию\активацию процесса. При этом будет пересоздан триггер для процесса.

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

Логвин Андрей Витальевич,

За 2 абзац спасибо, не знал.

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

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

Возможно ли реализовать в б-п переход на следующий элемент по таймеру?
Например, прошло 5 минут, если не исполнился элемент, мы переходим на следующий. Пытались сделать через "Исключающее ИЛИ по событиям", которое разветвлялось бы на таймер и необходимое событий, но всегда отрабатывает по ветке таймера, опуская само событие.

Нравится

1 комментарий

Анастасия, добрый день!

У каждого элемента есть условия, при которых он считается выполненным. “Перескочить” элемент через определенное время не получится. У вас верный подход к решению:
1. Элемент [Исключающее ИЛИ по событиям]. Из элемента выходят 2 потока перехода.
2. Первый поток – элемент [Таймер].
3. Второй поток - элемент [Обработка сигнала]. Ожидает изменения целевой записи.

В результате либо истечет время таймера, либо запись будет соответствовать условиям и процесс пойдет по одной или второй ветке.

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

В БП использую таймер, значение которого меняется динамически в зависимости от планируемой даты оплаты счета. При повторном запуске таймера (если изменилась дата) - таймер не перезаписывается, в планировщике создается еще одна задача. Удалять задачу напрямую из базы очевидно не вариант, т.к. удалятся все таймеры запущенных экземпляров этого бп. Единственный вариант - удалять таймер в зависимости от его группы (колонка JOB_GROUP в таблице QRTZ_JOB_DETAILS). В колонке храниться Guid. Возможно ли в бп определять это значение, чтоб удалять таймер для этого бп?

Нравится

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

Здравствуйте, Олег!

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

В результате при изменении даты:
1) Старый экземпляр процесса завершится
2) Новый экземпляр процесса создастся.

Доброго времени суток, Алексей. Дело в том что бп запускается вручную, и на определенном шаге стартует таймер, и в параллельной ветке стоит промежуточный сигнал, после которого таймеру задается новый параметр. Если я правильно Вас понял, то завершать бп не вариант.

А впрочем я вынесу то, что Вы предложили в подпроцесс. Спасибо за идею!

Всегда пожалуйста:smile:

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

Добрый день! Создал БП, который начинает выполняться по сигналу создания или сохранения карточки. Чтобы пользователь не ждал окончания БП, использую элемент "Таймер". В логе все элементы БП отмечены как выполненные, но результатов выполнения нет. Без таймера все работает, но достаточно длительное время. Версия 7.5.0.1328.

Нравится

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

Добрый день!
Покажите диаграмму процесса с таймером и без.

"Зарицкий Олег" написал:

Добрый день!
Покажите диаграмму процесса с таймером и без.

"Медведев Валентин Николаевич" написал:
Зарицкий Олег пишет:

Добрый день!
Покажите диаграмму процесса с таймером и без.

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

bp.jpg
15.59 кб

ой, вообще не разобрать

в процессе используются элементы "Изменить права". Без таймера записи в детали "Изменить права доступа" появляются, с таймером - нет

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

В более ранних версиях элемент "Изменить права доступа" не отрабатывает после элемента "Таймер". Есть два решения:

    • Обновиться на 7.8.0.
    • Использовать элемент "Задание-сценарий" для раздачи прав. В этом элементе необходимо выполнить insert в таблицу Sys[#Object#]Right
    Показать все комментарии

    Добрый день.

    Подскажите почему может быть такая ситуация:
    В БП используется Таймер. Если в таймер идет один поток и из него один поток, то он работает корректно.
    Но если добавить из таймера два исходящих потока или исключающее ИЛИ после таймера с двумя исходящими потоками, то БП работает некорректно.
    Сделала тестовый БП:
    1. В сценарии пишется лог в файл + уменьшается параметр, отвечающий за кол-во повторений БП
    2. Чтение данных только для определения по какому маршруту идет процесс
    3. В условном потоке идет проверка: завершить процесс (параметр Бп = 0)
    Причем после первого выполнения сценария, он повторно не выполняется (то, что не выполняется знаю точно, потому что веду логирование в данном сценарии). Диаграмма БП на картинке 3.
    Версия продукта 7.3.0.1910.

    Нравится

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

    Александра, судя по скриншотам журнала процессов, элемент «Задание-сценарий» не логируется. Пожалуйста, установите в дизайнере процессов признак «Журналировать» этому элементу.

    Также, у процесса есть свойство «Максимальное количество повторений» - это количество повторений после которых процесс завершается вне зависимости от результата.

    1. Устанавливала признак Журналировать. При этом в Диаграмме отмечается, что блок обрабатывался, но изменений в параметре и логах при этом нет. Такая ситуация наблюдается только со сценариями, при повторном запуске вычисления в них не срабатывают.
    2. Так же пробовала другую ситуацию. Сделала два Бп:
    первый состоит из таймера и подпроцесса (запуск второго БП)
    второй содержит всю обработку.
    При такой реализации все работает корректно. Получается каждый день будет появляться новый БП (2), созданный из БП (1). У таймера старт раз в сутки. Единственное Бп 2 содержит только один скрипт, это немного странно. Удобней было бы все реализовать в одном..
    Насколько корректным будет такой вариант? Может есть какие-то "подводные камни"?
    3. Так же есть вариант делать без сценария, а с использованием других элементов БП, но это сильно усложнит логику и в БП будет цикл с несколькими элементами процесса.

    Максимальное число повторений при подходе 2. не сработало. Ставила 3 повторения, отработал 4, после чего пришлось выключить руками.

    Александра, добрый день!

    Для решения задачи предлагаем использовать планировщик, вместо цикличности процесса. Необходимо добавить в планировщик job, который будет запускать процесс с необходимой периодичностью. Для этого следует:

    1. В БП добавить элемент “Задание сценарий”.
    2. В сценарии прописать следующий код :
    string schedulerJobGroupName = "ScheduleTest"; // произвольное название
    string jobProcessName = "UsrScheduleTest"; // название бизнес-процесса
    string schedulerJobName = "ScheduleTestJob"; // произвольное название
    int startOffset = 60; // периодичность запуска (в секундах)
    AppScheduler.RemoveJob(schedulerJobName, schedulerJobGroupName);
    var job = AppScheduler.CreateProcessJob(schedulerJobName, schedulerJobGroupName, jobProcessName, UserConnection.Workspace.Name, UserConnection.CurrentUser.Name);
    var trigger = new SimpleTriggerImpl(schedulerJobName + "Trigger", schedulerJobGroupName, DateTime.UtcNow.AddSeconds(startOffset));
    AppScheduler.Instance.ScheduleJob(job, trigger);
    return true;
    3. Сохранить сценарий.

    4. В пространство имен (Usings) процесса добавить:
    - Quartz.Impl
    - Quartz
    - Quartz.Impl.Triggers
    - Terrasoft.Core.Scheduler

    5. Опубликовать процесс.

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

    Спасибо за предоставленные комментарии.
    Сделала еще один процесс с таймером и сценарием и сценарий стал отрабатывать. В чем была причина проблемы отработки сценария в предыдущем ТМ так и не выяснила.

    По поводу решения через Quartz, я верно понимаю, что необходимо предварительно настроить планировщик?

    Здравствуйте, Александра! Планировщик в системе уже существует и настроен. Процесс создает Job, который запускается в указанное время. Запускаемые Job можно найти в таблице dbo.qrtz_triggers

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