При обновлении крупных конфигураций на платформе 1С:Предприятие 8.3 (таких как "Зарплата и управление персоналом", "Бухгалтерия предприятия" или "ERP Управление предприятием") администраторы и разработчики часто сталкиваются с ситуацией, когда основное обновление конфигурации завершено, но система сообщает о необходимости выполнения дополнительных процедур обработки данных. В файловом варианте базы данных этот процесс запускается автоматически при первом входе пользователя и завершается достаточно быстро. Однако в клиент-серверном варианте эти процедуры могут "зависать" неделями, ограничивая работу пользователей с необновленными данными.
В этой статье мы подробно разберем, почему дополнительные процедуры обновления не выполняются в клиент-серверном режиме, как локализовать эту проблему и какими способами можно принудительно запустить или сбросить зависшие обработчики обновления.
Для начала проанализируем, как работает механизм отложенного обновления, встроенный в Библиотеку стандартных подсистем (БСП). Этот механизм призван минимизировать время простоя системы при обновлении релиза. Основные критические изменения структуры метаданных выполняются монопольно, а длительные обработки данных (например, пересчет старых регистров, заполнение новых реквизитов справочников или перестроение индексов поиска) переносятся в фоновый режим.
В файловом варианте у платформы нет постоянно работающего сервера приложений и планировщика задач. Поэтому при первом запуске программы после обновления система запускает обработку данных в интерактивном режиме от имени текущего пользователя. Весь процесс выполняется в одном потоке прямо на рабочем месте.
В клиент-серверном варианте логика меняется. Платформа стремится освободить пользователя от ожидания. Сразу после запуска обновленной базы управление передается планировщику заданий на сервере приложений 1С:Предприятия. Запуск обработчиков обновления делегируется специальному регламентному заданию, которое называется "Отложенное обновление ИБ". Если это регламентное задание по какой-то причине не может стартовать, отложенное обновление останавливается, а пользователи видят предупреждение об ограничении работы с данными.
Самой частой причиной, по которой "зависает" отложенное обновление на сервере, является включенная блокировка регламентных и фоновых заданий для конкретной информационной базы. Часто администраторы включают эту блокировку перед обновлением конфигурации, чтобы пользователи или другие фоновые процессы не мешали процессу накатывания нового релиза, но забывают снять ее после завершения технических работ.
Выясним, как проверить и исправить эту настройку. Разберем два основных способа управления этой опцией.
Для того чтобы проверить параметры информационной базы на сервере приложений, выполним следующие шаги:
Важное примечание: Существует распространенное заблуждение, что регламентные задания можно заблокировать только глобально для всего кластера. На самом деле, эта блокировка устанавливается индивидуально для каждой информационной базы в ее свойствах. Однако администратор может также запустить сам рабочий сервер кластера с ключом блокировки фоновых заданий (параметр запуска службы /b), либо перевести кластер в режим отладки, блокирующий планировщик. В этом случае потребуется проверка параметров запуска службы 1С:Предприятия в диспетчере служб Windows или конфигурационных файлах Linux.
Если у вас нет прямого доступа к консоли администрирования серверов 1С, мы можем проанализировать состояние планировщика непосредственно из пользовательского интерфейса. Для этого выполним следующие действия:
Если блокировка регламентных заданий снята, но процедуры обновления все равно не выполняются, рассмотрим другие технические нюансы серверного окружения:
USR1CV8). Если у этого пользователя нет полных прав на чтение и запись во временную директорию (папку Temp) сервера или в каталоги установленной платформы, фоновые задания будут аварийно завершаться сразу после старта без детального логирования в журнале регистрации.Бывают ситуации, когда нам необходимо выполнить обновление максимально быстро и гарантированно, минуя стандартный планировщик регламентных заданий кластера. Для этого мы можем задействовать недокументированные параметры запуска Библиотеки стандартных подсистем.
Рассмотрим два ключевых параметра запуска системы, которые передаются через ключ /C командной строки:
/C ВыполнитьОтложенноеОбновлениеСейчас — этот ключ указывает системе запустить выполнение всех отложенных обработчиков обновления немедленно в текущем сеансе. Запуск происходит в монопольном (однопоточном) режиме. Это гарантирует, что обновление выполнится до того, как в базу зайдут пользователи. Данный ключ незаменим при последовательном обновлении конфигурации через несколько релизов подряд, когда нельзя переходить к следующему этапу обновления, пока не завершился предыдущий./C ЧислоПотоковОбновления;<число> — позволяет вручную регулировать количество параллельных потоков, выполняющих обработку данных. По умолчанию система пытается использовать 8 потоков. На производительных серверах это число можно увеличить (рекомендуется устанавливать по количеству ядер процессора), что существенно ускорит процесс. Если же в процессе обновления возникают ошибки транзакционных блокировок, количество потоков имеет смысл уменьшить до 1 или 2.Пример строки запуска для принудительного выполнения отложенного обновления в монопольном режиме:
"C:\Program Files\1cv8\8.3.22.1709\bin\1cv8.exe" ENTERPRISE /S "Server1C\ZUP_Base" /N "Администратор" /P "Пароль" /C ВыполнитьОтложенноеОбновлениеСейчас /DisableStartupMessages
Иногда возникает ситуация, когда статус процедур обновления в интерфейсе "Результаты обновления программы" застывает в положении "Выполняется", но фактически никаких фоновых процессов на сервере 1С не запущено (например, произошел аварийный перезапуск сервера или службы rphost). В этом случае стандартные механизмы могут бесконечно ожидать завершения несуществующего процесса.
Для программного решения этой проблемы разработчик или администратор с правами на запуск внешних обработок может выполнить специальный код. Рассмотрим эти методы подробнее.
Для принудительного программного старта процедур обновления выполним следующий код:
// Запуск выполнения отложенного обновления в текущем сеансе
ОбщийМодуль.ОбновлениеИнформационнойБазыСлужебный.ВыполнитьОтложенноеОбновлениеСейчас();
Если обновление зависло и не реагирует на стандартные команды, выполним сброс состояния обработчиков и их перезапуск с помощью метода БСП:
// Сброс зависших фоновых заданий обновления и их повторная регистрация
ОбновлениеИнформационнойБазы.ПерезапуститьОтложенноеОбновление();
Этот метод принудительно останавливает текущее зависшее регламентное задание, заново анализирует зарегистрированные данные для обработки и корректно перезапускает процесс обновления с чистого листа.
Мы проанализировали основные причины, по которым могут не выполняться дополнительные процедуры обновления в клиент-серверной версии 1С:Предприятия. В большинстве случаев проблема кроется в банальной блокировке регламентных заданий в свойствах информационной базы. Решив эту проблему на уровне администрирования кластера или воспользовавшись параметрами командной строки для принудительного запуска, мы сможем гарантировать стабильную работу системы и актуальность всех данных в базе.