Задания по таймеру¶
ℹ️ В системе существуют регламентные операции, которые должны выполняться не в ответ на действия пользователя, а в соответствии с определенным расписанием. Подобные действия называются Заданиями и управляются в разделе "Задания по таймеру"
В таблице Сервера указан сервер системы "Первая Форма", на котором запускаются задания. Таблица отображает сервер независимо от того, включена ли кластеризация Quartz.
ℹ️ Если в таблице «Сервера» отображается «Нет данных» — сервер не настроен как job-сервер. Проверьте, что в файле
appsettings.jsonна нужном сервере приложения явно указан параметр"IsJobServer": trueв секцииServer. После изменения конфигурации перезапустите пул приложения.
В таблице Задания (Quartz) отображаются задания, выполняемые на открытой платформе Quartz, с указанием времени ближайшего запуска, времени последнего запуска и текущего статуса задания.
Максимально допустимое количество параллельных заданий по таймеру по умолчанию — 10. При необходимости иное значение можно задать в системном файле appsettings.json в ключе JobServerMaxConcurrency.
Статусы заданий¶
-
WAITING — ожидает следующего запуска (нормальное состояние задания).
-
ACQUIRED — подготовка к запуску (задание будет выполняться следующим).
-
BLOCKED — задание заблокировано.
-
EXECUTING — задание выполняется в настоящее время. После выполнения статус задания будет возвращен в WAITING, или задание будет удалено, если у него больше нет повторений.
-
PAUSED — задание находится в состоянии паузы до тех пор, пока расписание не выполнит команду Resume.
Активность задания¶
Если задание нужно остановить на какое-то время (чтобы оно не запускалось по расписанию), в настройках расписания (см. выше) отключите флажок Расписание активно. В этом случае расписание перейдет в статус PAUSED.
Ручной запуск задания¶
Задание в статусе WAITING можно запустить вручную, вне расписания, нажав кнопку в конце соответствующей строки.
ℹ️ Если вручную запустить любое задание с любого веб-сервера, этот сервер появится в таблице "Сервера" в дополнительной строке. После перезапуска пула приложения эта дополнительная строка исчезнет из таблицы.
Разблокировка задания¶
Задание в статусе BLOCKED можно разблокировать кнопкой в конце соответствующей строки.
Если задание отображается красным цветом, проверьте его статус и выполните регламентные действия, см. раздел Обслуживание заданий "Первой Формы" в Руководстве по техподдержке.
Ошибки при выполнения заданий фиксируются в журнале.
Журнал с фильтрацией по заданию¶
При нажатии на название в колонке Задание система автоматически открывает журнал заданий по таймеру с примененным фильтром по выбранному имени.
Расписание¶
Для редактирования расписания выполнения задания, нажмите мышью на соответствующей строке в любой колонке, кроме названия задания, и в открывшемся окне отключите настройку Использовать стандартное расписание.
Откроется форма для настройки расписания:
Для отключения расписания снимите отметку с опции Расписание активно.
Для заданий со смарт-расписанием и/или настроенным пакетом действий доступны прямые ссылки в разделы администрирования, по которым можно перейти в настройки соответствующего правила расписания или пакета действий.
Чтобы сохранить новые настройки, нажмите кнопку Сохранить.
Описание заданий¶
| Задание | Описание |
|---|---|
| AddAssistantsRecipientsToUnansweredQuestionsJob | Добавляет заместителей, назначенных на будущие периоды, в получатели неотвеченных вопросов, адресованных замещаемым ими сотрудникам |
| ADSyncJob | Синхронизирует учетные записи пользователей и орг.структуру "Первой Формы" с каталогом Active Directory |
| ArchiveCommentRecipientsJob | Архивирует получателей комментариев, которые были отправлены более двух недель назад, для оптимизации размера таблиц в базе данных и скорости формирования ленты комментариев. Также помечает прочитанными комментарии, которые не были прочитаны больше месяца. Сообщения с архивированными адресатами (isArchive=true в таблице CommentRecipientsAll) не отображаются в представлении категории Лента. |
| AbsenceJob | Обновляет кеш UserAbsencesCache |
| AzureCognitiveTranslateJob | Асинхронный автоматический перевод локализованных значений на все языки при изменении локализации с использованием AI-сервиса. Джоб принимает параметры: исходный текст, язык источника и целевой язык. Настройки AI-сервиса задаются в разделе сервис TranslateService. Для работы сервиса используются только поля Url и Ключ. После настройки сервиса его необходимо выбрать в опции Перевод комментариев общих настроек приложения. Для возврата к использованию Azure Cognitive Services предусмотрена возможность указать кастомную настройку TranslationService со значением azure |
| CalendarSyncFinishResourceFactJob | Проставляет фактические трудозатраты для событий в календаре |
| CalendarSyncJob | Синхронизация календаря с Exchange |
| CheckDefaultFileDatabaseJob | Оптимизация БД основного файлового провайдера (dbcc checkdb) |
| CleanExpiredFilesFromPreuploadedTusStoreJob | Удаление временных файлов из tus-хранилища. Время жизни загруженных файлов в часах устанавливается в параметре FileExpirationInHours ключа Tus в системном файле приложения appsettings.json. Если в параметре ключа задано NULL, файлы удаляться не будут. > ℹ️ Если на основном сервере приложения в appsettings.json включен Tus, то для корректной работы задания по таймеру его необходимо включить и на джоб-сервере |
| CleanMailBoxesJob | Помечает на удаление письма старше n-дней (настройка почтового ящика Хранить письма) |
| ClearCommentRecipientsArchiveJob | Очищает архив получателей комментариев, срок которых больше года |
| ClearOldLogDbRecordsJob | Очищает журнал ошибок, журнал звонков и записи об изменении смарт-доступа в общем журнале (такие записи начинаются словами "Smart Доступ") |
| ClearOldPreUploadedForPostTaskFilesJob | Очищает временные файлы при постановке задачи |
| ClearAutomationScriptsLog | Очищает таблицу AutomationScriptsLog — лог хранимых процедур SOAP (удаляет записи старше двух недель) |
| ClearUnusedAddresses | Удаляет неиспользуемые адреса из ДП типа "Адрес" (т.е. адреса, которые не выбраны ни в одной задаче) |
| CloseStaleThreadsJob | Закрывает обсуждения, в которых последнее сообщение было отправлено более 2 недель назад. Отрабатывает ежедневно в 02:00. Исключением являются категории из раздела, указанного в кастомной настройке SocialNetworksSettings.RootCategoryId |
| ClosingUserSession | Раз в сутки, в ночное время, закрывает открытые пользовательские сессии (в журнале активности пользователей UsersActivityInSystem) |
| CommentsTranslationJob | Очередь комментариев на перевод с помощью сервиса Azure Cognitive. Задание включено только если в Общих настройках приложения в настройке Перевод комментариев Azure Cognitive Services указан соответствующий сервис |
| CreatePeriodicTasksJob | Создает повторяющиеся задачи |
| CreateTasksForAppointmentsJob | Создает задачи по встречам, которые по какой-то причине не были созданы ранее |
| CreateTasksOccurrencesForAppointmentsJob | Создает задачи повторения всем незавершенным встречам и повторениям, синхронизирующимся с задачами |
| Delete1CLogExceptWeekJob | Чистит журнал синхронизации с 1С |
| DeleteDSSOlgLogs | Удаление логов DSS |
| DeleteOldJobLogJob | Чистит журнал выполнения заданий Quartz |
| DeleteOldLockTokensJob | (Устаревшее. WebDav больше не используется) Чистит блокировки файлов WebDav'a |
| DeleteOldMobileClientStatsJob | Удаление старой статистики по клиентам мобильного приложения |
| DeleteOldPushTokensJob | Чистит старые пуш-токены для iOS |
| DeleteUserAbsenceLogsJob | Удаление старых логов отсутствия пользователей |
| DenormalizationBadJob | Перезапустить денормализацию изменения категории для застрявших задач |
| EmailJobPurgeDeleted | Физически удаляет письма, помеченные для удаления, синхронизация удаления которых завершена (до их удаления на сервере они остаются в БД, чтобы у задания синхронизации удаления была информация о том, какие именно письма удалил пользователь) |
| EmailJobReceiveSecondary | Получает письма, руководствуясь очередью на получение, формируемой заданием EmailJobSyncFolders. Данное задание пытается получить письма, при получении которых возникло больше 5 ошибок (после 5 попыток письмо все еще не получено). Такие письма перестают обрабатываться заданием EmailJobReceive, чтобы не тормозить получение новых писем, и обрабатываются заданием EmailJobReceiveSecondary |
| EmailJobReceive | Получает письма, руководствуясь очередью на получение, формируемой джобом EmailJobSyncFolders |
| EmailJobSendSecondary | Отправляет письма, обрабатывая очередь на отправку. Данное задание пытается отправить письма, при отправке которых возникло больше 5 ошибок (после 5 попыток письмо все еще не отправлено). Такие письма перестают обрабатываться заданием EmailJobSend, чтобы не тормозить отправку новых писем, и обрабатываются заданием EmailJobSendSecondary |
| EmailJobSend | Отправляет письма, обрабатывая очередь на отправку |
| EmailJobSyncDelete | Синхронизирует удаление писем. Сравнивает каждую папку в каждом почтовом ящике с локальным данными и делает выводы о том, какие письма были удалены на сервере и какие письма были удалены в почтовом клиенте "Первой Формы", и удаляет эти письма на другой стороне тоже |
| EmailJobSyncFolders | Синхронизирует папки почтовых ящиков -- определяет наличие новых писем и синхронизирует флаги "прочтено\не прочтено". > ℹ️ Задание не получает новые письма, а лишь формирует очередь на получение. Скачивает и получает письма задание EmailJobReceive |
| EnableDoSyncWithExchangeJob | Включает синхронизацию с Exchange всем пользователям, у которых она была выключена с ошибкой от Exchange, а не намеренно администратором |
| EnsureDenormCanonicalIndexesExists | Вызывает хранимую процедуру EnsureDenormCanonicalIndexesExists |
| EscalateOverdueSignatures | Эскалирует просроченные подписи |
| EventQueue1CJob | Обрабатывает очередь событий для 1С |
| FireUsersJob | Увольняет пользователей, находящихся в очереди на увольнение |
| LazyUpdatableCachesUpdateJob | Обновляет специальные кеши, которые заполняются по запросу на джоб сервере. К примеру, кеши для Exchange: кеш прав, кеш календарных папок для пользователей и т.д. В кастомных настройках приложения поддерживаются два ключа для работы с заданием: LazyJobsShowDetailedLog — Выводит более подробные данные в сообщении задания по таймеру: ключи и полученные значения LazyJobsNumberOfItemsToProcessInBatch — Позволяет задать значение количества записей, которые будут единоразово обработаны в задании по таймеру |
| MarkOldUnredCommentsAsReadJob | Помечает как прочитанные все комментарии старше двух недель, если у пользователя более 200 непрочитанных комментариев |
| MigrationExportJob | Запускается при формировании файла конфигурации всех сущностей приложения по нажатию на кнопку Полная выгрузка на странице экспорта. Подробная схема утилиты переноса: migration_utility.md |
| OverdueCommentsNotificationJob | Пишет комментарии в просроченные задачи (см. настройку уведомлений о просроченных задачах в категориях) |
| OverdueNotificationJob | Рассылает на почту отчет о просроченных задачах (см. настройку уведомлений о просроченных задачах в категориях) |
| OverdueStepActionJob | Выполняет просроченные переходы, для которых включена настройка "Выполнить переход когда просрочен" |
| ParseCommentsLinksJob | Генерация ссылок из существующих комментариев. Задание выполняется автоматически с интервалом в одну минуту и обрабатывает комментарии, которые потенциально содержат ссылки (в тексте которых встречаются символы "#" или "http"). После обработки всех комментариев задание не отключается, а автоматически переходит в режим ежедневного запуска в 23:00. Базовым расписанием остается "Каждую минуту" для немедленного запуска после перезапуска системы, после чего джоб снова переключается на ежедневное выполнение, если нет активных задач для обработки. За одну итерацию обрабатывается до 10 000 комментариев. Идентификатор последнего обработанного комментария в каждой итерации сохраняется в системе в значении кастомной настройки приложения ParseCommentsLinksJob_LastParsedCommentId. После того как все существующие комментарии будут обработаны и новые записи для выборки отсутствуют, джоб автоматически приостанавливает свою работу |
| PayControlTransactionsSyncJob | Синхронизация транзакций PayControl (см. ЭЦП) |
| PrepareUnusedFileStorageFilesForRemovalJob | Помечает на удаление неиспользуемые файлы в файловом хранилище (Диск) Неиспользуемыми являются файлы удовлетворяющие следующим условиям: - Файл не имеет связи с папкой Диска - Файл не вложен в задачу - Файл не является вложением комментария - Файл не является вложением письма - Файл не является файлом типа RedLine - Файл не вложен в ДП - Файл не является шаблоном в настройках категории - Файл не является вложением встречи календаря - Файл не является файлом мобильного лога ошибок - Файл не является иконкой используемой в настройке индикатора (счетчика) - Файл не является аватаркой пользователя - Файл не участвует в процессе подписи при помощи ЭЦП Все файлы, удовлетворяющие перечисленным условиям, будут помечаться заданием как неиспользуемые. |
| PurgeAttachmentsJob | Очищает удаленные файлы старше трех месяцев |
| PurgePushLogJob | Очищает логи пушей. |
| OcrJob | Используется для распознавания текста в изображениях (.img .jpg .png), благодаря чему обеспечивается поиск по графическим файлам: Обязательным условием для работы задания является наличие пользовательского ключа FileIdToStartOcr, в котором необходимо указать минимальный ID файла (из таблицы в БД "FileStorageFiles"), с которого начинается обработка файлов. Ночью с 23:00 до 07:00 задание работает без ограничения по ID для обработки всех файлов. |
| QueueEventsJob | Вызывает событие из очереди |
| QueueFailedEventsJob | Вызывает события с ошибками из очереди |
| RebuildIndexesJob | Перестраивает фрагментированные индексы и очищает кеш планов выполнения запросов. По умолчанию задание не активно. При включении надо указать нужную базу данных и пользователей, которым будут отправляться отчеты (если отчеты не нужны, то в качестве пользователя надо указывать systemrobot) |
| RefreshAllUsersPermissionsJob | Выполняет полный пересчет кастомных и гибких прав на задачи для всех пользователей раз в час |
| RefreshOnlineUsersPermissionsJob | Обновляет кастомные и гибкие права на задачи права для пользователей, находящихся в сети, каждые 5 минут |
| RefreshDescendantSubcatAccessJob | Актуализирует права доступа для дочерних подкатегорий каждые 5 минут |
| RefreshSubcatTickersJob | Обновляет данные индикаторов с количеством задач категорий каждые 5 минут |
| RefreshUserAssistantIsActualJob | Обновляет статус актуальности замещения пользователей каждые 30 минут |
| RefreshUserNamesJob | Обновляет имена пользователей каждый час |
| RefreshUserMenuItemTickersJob | Обновляет индикаторы с количеством задач в пунктах меню пользователя с интервалом в 5 минут |
| RemovePreparedFileStorageFilesJob | Удаляет помеченные к удалению файлы в файловом хранилище (Диске) |
| RemoveUnusedFilesInProvidersJob | Удаляет из файловых провайдеров файлы, не используемые в "Первой Форме" |
| SendRemindersJob | Рассылает напоминания |
| ServiceMailBoxesJob | Проверяет сервисные почтовые ящики, обрабатывая письма с уведомлениями о прочтении или новыми комментариями, отправленными по почте (если пользователь ответит на письмо с уведомлением о комментарии, то будет создан новый, ответный комментарий с текстом из отправленного им письма) |
| SetTaskIsOverdueJob | Помечает задачи с превышенным срок выполнения как просроченные |
| SmartRecurrenceJob | Выполняет smart-расписания |
| SqlServerQueueClearJob | Чистит очереди Rebus |
| SubcatTickersJob | Обновляет показатели для дерева категорий |
| Sync1CUsersJob | Синхронизирует пользователей из 1C |
| SyncAbsencesToCalendarSubcatJob | Синхронизирует отсутствия |
| SyncEdocumentsFromDiadocJob | Интеграция с системой Диадок |
| SyncEdocumentsFromSbisJob | Интеграция с системой СБИС |
| SyncExchangeRoutineJob | Экспортирует контакты в адресную книгу Exchange |
| SyncHookServiceRoutineJob | Отправляет неотправленные клиентам события и очищает записи о старых событиях из БД |
| SynchronizeTagsActiveTasksWithView | Пересчитывает доступы к активным задачам по условиям тегов |
| SynchronizeTagsTasksWithView | Пересчитывает доступы к задачам по условиям тегов |
| SyncOrgStructure1CJob | Синхронизирует орг. структуру из 1C |
| TableExtParamValuesGZipCompressJob | Перегоняет значения атрибута ExtParamHistoryGzip в таблице базы данных ExtParamHistory (История изменения ДП) и атрибута ExtParamValueGzip в ExtParamValues (Значения ДП) в Gzip. Запускается раз в 3 минуты, и обрабатывает по 10000 строк за раз. Сначала ExtParamValues, потом ExtParamHistory. Задание не инициирует полную денормализацию, затрагивает только изменяемые ДП. Задание работает непосредственно с целевыми данными (ExtParamValue), не выполняя лишних обращений к связанной таблице ExtParams. Для денормализации данных выбирается только изменяемый табличный дополнительный параметр, а не все параметры в его категории |
| TaskTextLogGZipCompressJob | Сжимает историю изменения текстов задач в GZip |
| TikaJob | Получение текста из файлов (pdf, doc, docx, xls, xlsx, ppt, pptx, txt, xml, html, eml, json, md), благодаря чему обеспечивается поиск по текстовым файлам: Для работы джоба необходимо предварительно добавить сервис Tika и выбрать его в общих настройках приложения (пункт "Tika Service"). Обязательным условием для работы данного задания по таймеру является наличие пользовательского ключа FileIdToStartOcr, в котором необходимо указать минимальный ID файла (из таблицы в БД "FileStorageFiles"), с которого начинается обработка файлов. Ночью с 01:00 до 05:00 задание выполняет полный скан всех необработанных файлов без ограничения по ID. Файлы с расширениями .md и .txt обрабатываются нативно — текст извлекается напрямую с автоматическим определением кодировки, без отправки в Tika-сервис. |
| UpdateCoworkersCacheJob | Обновляет список коллег |
| UpdateSubcatTickersAndUserAssistancesJob | Обновляет показатели для дерева категорий |
| UserAuthenticationProviderVerificationJob | Обеспечение безопасности и соответствия политикам паролей путем автоматической проверки учетных записей пользователей и принудительного завершения сессии в случаях, когда требуется повторная аутентификация или смена пароля. Периодичность запуска задания — 15 минут. Задание выполняет двухуровневую проверку активных пользователей. Алгоритм работы: 1. Проверка политик паролей Данная проверка активируется при включении кастомной настройки приложения UserAuthenticationProviderVerificationJob_EnablePasswordScan = true. Задание идентифицирует пользователей, которые соответствуют одному из следующих критериев: - Дата установки пароля пользователя (атрибут PasswordSetDate в таблице Users) и срок действия пароля из общих настроек приложения превышена. - При создании пользователя активирован флаг Сменить пароль при входе. - Пользователь был онлайн не ранее, чем 30 дней назад (для исключения устаревших записей). Результат для найденных пользователей: в таблице базы данных Users для атрибута ReloginRequiredAfter устанавливается значение ServerNow. Это приводит к немедленной деактивации их текущих токенов и принудительному выходу из системы.2. Проверка статуса в Active Directory Для всех пользователей, которые были активны в приложении (на основе атрибутов LastOnlineTime, LastMobileOnlineTime) и у которых указан SID, выполняется запрос их статуса в Active Directory. Данные для запроса в ActiveDirectory берутся из провайдера аутентификации "ActiveDirectory". Если последняя смена пароля учетной записи пользователя в ActiveDirectory (атрибут pwdLastSet) произошла позже последнего входа пользователя в систему (атрибут lastLogin в таблице dbo.LoginsLog), будет запрошен повторный вход в систему (в таблице dbo.Users.ReloginRequired будет установлено значение 1) Если учетная запись пользователя в ActiveDirectory отключена (атрибут userAccountControl содержит флаг ACCOUNTDISABLE (2)), будет запрошен повторный вход в систему (в таблице dbo.Users.ReloginRequired будет установлено значение 1) При запросе повторного входа в систему приложение совершит переадресацию на страницу авторизации пользователя. Джоб учитывает значение ключа UseSecureLDAP (Использование SSL при аутентификации через LDAP) в web.config / appsettings.json |
| WarmUpPushJob | Диагностика отправки пушей |
Описание настройки заданий по таймеру в прежнем интерфейсе администрирования
Полезные ссылки¶
Технический анализ заданий¶
Сводная статистика¶
Всего зарегистрировано заданий: 86 (78 основных + 8 условных email-джобов)
Распределение по частоте выполнения: - Высокочастотные (< 1 мин): 3 задания - Частые (1-5 мин): 22 задания - Средние (5-60 мин): 8 заданий - Редкие (1+ час): 9 заданий - Ежедневные: 25 заданий - Еженедельные: 5 заданий - Email-джобы (условные): 8 заданий
Хранимые процедуры, вызываемые из заданий¶
| SP / Функция | Вызывающее задание | MS SQL | PostgreSQL | Частота |
|---|---|---|---|---|
dbo.UserTickers_refresh |
TickersRecalculationJob | ✓ | ✓ | 10 сек |
dbo.SetTasksOverdueFlag |
SetTaskIsOverdueJob | ✓ | ✓ | 2 мин |
dbo.DescendantSubcatAccessRefresh |
RefreshDescendantSubcatAccessJob | ✓ | ✓ | 5 мин |
dbo.SubcatTickers_refresh |
RefreshSubcatTickersJob | ✓ | ✓ | 5 мин |
dbo.UserMenuItemTickers_refresh |
RefreshUserMenuItemTickersJob | ✓ | ✓ | 5 мин |
dbo.AllUserPermissionsRefresh |
RefreshOnlineUsersPermissionsJob, RefreshAllUsersPermissionsJob | ✓ | ✓ | 5 мин / 60 мин |
dbo.FindUnprocessedFilesForAbstract |
OcrJob, TikaJob | ✓ | ✓ | 15 мин |
dbo.MarkUserAssistantActual |
RefreshUserAssistantIsActualJob | ✓ | ✓ | 30 мин |
dbo.InconsistentDenormalizations |
DenormalizationBadJob | ✓ | ✓ | ежедневно 01:00 |
dbo.EnsureDenormCanonicalIndexesExists |
EnsureDenormCanonicalIndexesExistsJob | ✓ | ✓ | ежедневно 01:00 |
dbo.sp_tc_ArchiveCommentRecipientsJob |
ArchiveCommentRecipientsJob | ✓ | ✓ | ежедневно 02:12 |
dbo.tc_NightlyMaintance |
RebuildIndexesJob | ✓ | ✓ | ежедневно 02:30 |
dbo.UpdateUsersCoworkers |
UpdateCoworkersCache | ✓ | ✓ | ежедневно 03:18 |
dbo.RefreshUserNameModes |
RefreshUserNamesJob | ✓ | - | ежедневно 04:00 |
dbo.RefreshUserNames |
RefreshUserNamesJob | - | ✓ | ежедневно 04:00 |
dbo.update__fts_comments |
RecalculateFTSCommentsJob | - | ✓ | ежедневно 05:10 (PG only) |
dbo.tc_NormalizeGroupUsersMembership |
ADSyncJob | ✓ | - | ежедневно 20:00 (MSSQL only) |
Наиболее нагруженные таблицы¶
Таблицы с высокой частотой записи:
| Таблица | Записывающие задания | Частота |
|---|---|---|
MessageQueue |
QueueEventsJob, SyncEdocumentsFromDiadocJob, SyncEdocumentsFromSbisJob | Очень высокая (5 сек) |
UserTickers |
TickersRecalculationJob | Очень высокая (10 сек) |
Tasks |
FireUsersJob, SyncAbsencesToCalendarSubcatJob, CreateTasksForAppointmentsJob, OverdueStepActionJob, ServiceMailBoxesJob, CreatePeriodicTasks | Высокая |
Comments, CommentRecipients |
OverdueCommentsNotificationJob, AddAssistantsRecipientsToUnansweredQuestionsJob, CloseStaleThreadsJob | Высокая |
Users |
FireUsersJob, ADSyncJob, Sync1CUsersJob, UserAuthProvVerificationJob, EnableDoSyncWithExchangeJob | Средняя |
TaskSignatures |
SetTaskIsOverdueJob, ConvertOldSignatureSnapshotsJob, EscalateOverdueSignatures | Средняя |
Emails |
EmailJobReceive/Send/SyncFolders/SyncDelete/PurgeDeleted, CleanMailBoxesJob | Высокая (при активации) |
FileStorageFiles |
PrepareUnusedFileStorageFilesForRemovalJob, RemovePreparedFileStorageFilesJob | Средняя |
ExtParamValues |
TableExtParamValuesGZipCompressJob, CreatePeriodicTasks | Средняя |
Таблицы с высокой частотой чтения:
| Таблица | Читающие задания | Частота |
|---|---|---|
UserTickers |
TickersRecalculationJob | Очень высокая (10 сек) |
MessageQueue |
QueueEventsJob | Очень высокая (5 сек) |
SubcatTickers |
RefreshSubcatTickersJob | Высокая (5 мин) |
UserMenuItemTickers |
RefreshUserMenuItemTickersJob | Высокая (5 мин) |
Особые поведения заданий¶
Глобальные условия:
- Все задания запускаются только при Configuration.IsJobServer == true
- Расписания можно переопределить через таблицу JobRecurrence / RecurrenceInfos
Самоостанавливающиеся задания:
Эти задания автоматически ставят себя на паузу после завершения миграции:
- ConvertOldSignatureSnapshotsJob — миграция JSON-снапшотов подписей в GZip
- TableExtParamValuesGZipCompressJob — миграция экстра-параметров в GZip
- TaskTextLogGZipCompressJob — миграция текстовых логов в GZip
- ParseCommentsLinksJob — после обработки всех комментариев переходит в режим ежедневного запуска
Цепочка файловой очистки:
Требование: все три задания требуют флаг EnableRemovalOfUnusedFiles¶
PrepareUnusedFileStorageFilesForRemovalJob(23:30) — помечает неиспользуемые файлыRemovePreparedFileStorageFilesJob(00:00) — удаляет помеченные файлы из БДRemoveUnusedFilesInProvidersJob(23:45) — удаляет файлы из физических провайдеров (S3, диск)
Отключённые задания:
| Задание | Статус | Причина |
|---|---|---|
| SyncExchangeRoutineJob | ОТКЛЮЧЁН | Тело Execute() закомментировано, no-op |
| OverdueSignaturesJob | Закомментирован | Заменён на EscalateOverdueSignatures |
| GetDSSConfirmationJob | Закомментирован | Метод GetConfirmationSynchronously() пустой |
| MigrationExportJob | На паузе (356 дней) | Запускается только вручную через UI |
.NET conditional компиляция:
- CalendarSyncJob, LazyUpdatableCachesUpdateJob — только NETSTANDARD2_0
- SmartRecurrenceJob — только NETSTANDARD2_0, на NET9+ заменяется динамическими джобами
Интеграции¶
1С: - EventQueue1CJob (6 мин) — обработка очередей событий - Sync1CUsersJob (ежедневно 20:00) — синхронизация пользователей - SyncOrgStructure1CJob (6 часов) — синхронизация оргструктуры - Delete1CLogExceptWeek (Вс 05:15) — очистка логов
Active Directory:
- ADSyncJob (ежедневно 20:00) — синхронизация пользователей и групп + вызов SP tc_NormalizeGroupUsersMembership (только MS SQL)
- UserAuthenticationProviderVerificationJob (15 мин) — проверка статуса пользователей в AD через LDAP
Exchange: - CalendarSyncJob (20 мин) — синхронизация встреч через EWS - CalendarSyncFinishResourceFactJob (20 мин) — расчёт фактических трудозатрат - CreateTasksForAppointmentsJob (1 час) — создание задач по встречам - CreateTasksOccurrencesForAppointmentsJob (3 часа) — экземпляры повторяющихся встреч - EnableDoSyncWithExchangeJob (ежедневно 07:00) — включение синхронизации
EDI (Электронный документооборот): - SyncEdocumentsFromDiadocJob (5 мин) — синхронизация с Диадок - SyncEdocumentsFromSbisJob (5 мин) — синхронизация с СБИС
Azure Cognitive Services: - AzureCognitiveTranslateJob (3 мин) — перевод локализованных значений и комментариев - CommentsTranslationJob — очередь комментариев на перевод
PayControl (ЭЦП): - PayControlTransactionsSyncJob (3 мин) — синхронизация транзакций электронной подписи
Apache Tika / OCR: - TikaJob (15 мин) — извлечение текста из документов (pdf, doc, docx, xls, xlsx, ppt, pptx) - OcrJob (15 мин) — распознавание текста в изображениях (Tesseract)
Rebus (очереди сообщений): - SqlServerQueueClearJob (1 час) — очистка зависших сообщений в очередях
Рекомендации по эксплуатации¶
Мониторинг критичных заданий:
Следующие задания требуют особого внимания при мониторинге:
- QueueEventsJob (5 сек) — обработка событий, критично для работы всей системы
- TickersRecalculationJob (10 сек) — тикеры UI, влияет на пользовательский опыт
- SetTaskIsOverdueJob (2 мин) — просроченные задачи, бизнес-критично
- RefreshOnlineUsersPermissionsJob (5 мин) — права доступа, безопасность
- ADSyncJob (ежедневно 20:00) — синхронизация пользователей из AD
Проблемные сценарии:
| Симптом | Возможная причина | Рекомендация |
|---|---|---|
Переполнение очереди MessageQueue |
QueueEventsJob не справляется с нагрузкой | Проверить статус задания, увеличить JobServerMaxConcurrency |
| Медленная работа БД ночью | RebuildIndexesJob создаёт блокировки | Настроить расписание или параметры индексации |
| Проблемы с Exchange-синхронизацией | CalendarSyncJob, EnableDoSyncWithExchangeJob | Проверить логи Exchange, настройки EWS |
| Переполнение диска | Файловые задания не работают | Проверить EnableRemovalOfUnusedFiles, цепочку очистки |
| Тормоза UI (тикеры) | TickersRecalculationJob выполняется долго | Оптимизировать SP UserTickers_refresh |
| Проблемы с правами доступа | RefreshAllUsersPermissionsJob не отрабатывает | Проверить SP AllUserPermissionsRefresh |
Оптимизация производительности:
- Настроить
JobServerMaxConcurrencyв appsettings.json (по умолчанию 10) - Переопределять расписания через таблицу
JobRecurrenceдля разнесения нагрузки - Отключать неиспользуемые интеграции (1С, Exchange, EDI) для снижения нагрузки
- Мониторить длительность выполнения в журнале заданий
- Для email-джобов настраивать условия активации через
EmailSettings
Различия по СУБД:
| Аспект | MS SQL | PostgreSQL |
|---|---|---|
| CheckDefaultFileDatabaseJob | DBCC CHECKDB |
Не выполняется |
| ADSyncJob | Вызывает tc_NormalizeGroupUsersMembership |
Без дополнительной SP |
| RefreshUserNamesJob | Вызывает RefreshUserNameModes |
Вызывает RefreshUserNames |
| RecalculateFTSCommentsJob | Не выполняется (no-op) | Вызывает update__fts_comments |
| tc_NightlyMaintance | Полный набор параметров для индексов | Упрощённые параметры для статистики |
Связанные документы¶
Техническая документация: - Реестр Quartz-заданий — детальное описание всех заданий с параметрами
Операционная документация: - Обслуживание заданий — runbook по эксплуатации - Monitoring — мониторинг системы - Common problems — типовые проблемы
Интеграции: - Интеграция с 1С — задания для обмена с 1С - Exchange Server — настройка синхронизации - Диадок, СБИС — EDI-интеграции