При администрировании распределенных информационных баз (РИБ) системные администраторы и программисты нередко сталкиваются с ситуацией, когда регламентный автоматический обмен данными внезапно перестает выполняться по расписанию. При этом ручной запуск процедуры отрабатывает штатно, а в журнале регистрации за период предполагаемого старта нет никаких записей об ошибках или попытках запуска сеанса. Проанализируем, почему возникает такое поведение в клиент-серверном режиме и как гарантировать стабильный запуск обменов.
Рассмотрим внутренние механизмы платформы 1С:Предприятие 8, управляющие регламентными заданиями, чтобы понять природу проблемы:
rmngr проверяет расписания заданий циклически с определенным внутренним интервалом (квантом времени). Если в расписании указано жесткое граничное время 23:59:59, а менеджер кластера из-за параллельных задач доходит до проверки базы на доли секунды позже (в 00:00:00 или 00:00:01), наступают следующие календарные сутки. Кластер считает задание за прошедший день пропущенным и откладывает его до следующей расчетной даты по расписанию.rphost в этот момент заняты параллельными операциями (например, регламентным обновлением индекса полнотекстового поиска), задачи становятся в очередь и не успевают стартовать в выделенную секунду текущих суток.Разберем основной и самый надежный способ решения проблемы — переход от критической секунды конца дня к безопасному временному интервалу.
23:59:59 укажем начало суток 00:00:00 (или 00:05:00) для нужных дней недели. Если обмен должен происходить ночью после закрытия рабочего дня (например, со вторника по субботу), запуск в 00:00:00 вторника гарантированно подхватит накопленные за понедельник данные.00:00:00, время окончания 00:30:00 и установим завершение после первого успешного выполнения задания.Выясним, как снизить пиковую нагрузку на сервер при наличии большого количества информационных баз на одном экземпляре СУБД и кластере 1С.
23:00:00;23:15:00;23:30:00;23:45:00;00:00:00 и далее.rphost.Если регламентное задание не оставляет следов в журнале регистрации, разберем настройку технологического журнала (ТЖ) для локализации причины на уровне процессов платформы.
Создадим или дополним конфигурационный файл logcfg.xml в каталоге настроек платформы со следующим содержимым:
<config xmlns="http://v8.1c.ru/v8/tech-log">
<log location="C:\LOGS\1C_Jobs" history="72">
<event>
<eq property="name" value="JOB"/>
</event>
<event>
<eq property="name" value="SESN"/>
</event>
<event>
<eq property="name" value="EXCP"/>
</event>
<property name="all"/>
</log>
</config>
Событие JOB покажет регистрацию, постановку в очередь и исполнение фонового задания менеджером кластера, событие SESN зафиксирует факт открытия сеанса, а EXCP перехватит системные исключения кластера, если фоновому заданию не хватило лицензий, памяти или лимита рабочих процессов.
В сценариях со строгой зависимостью цепочки обменов можно отказаться от встроенного планировщика 1С в пользу внешнего управления через Планировщик задач Windows или демон cron в Linux.
Посмотрим на пример пакетного вызова обмена через командную строку операционной системы:
"C:\Program Files\1cv8\8.3.XX.XXXX\bin\1cv8.exe" ENTERPRISE /S "Server1C\AccountingBase" /N "ExchangeUser" /P "SecurePass123" /C "ВыполнитьОбменДанными" /DisableStartupMessages
Также инициализацию обмена можно выполнять скриптом через COM-соединение V83.COMConnector, поочередно подключаясь к базам и вызывая процедуры менеджеров узлов обмена, что обеспечивает полный программный контроль над очередностью процедур.