Замечания про Google.Drive

  оглавление  Условия оказания технической поддержки пользователям обновлятора

Настраиваем файловые базы, опубликованные через web-сервер для обновлятора-1с (v2)

Введение

В этой статье мы рассмотрим проблему с получением монопольного доступа, которая возникает при обслуживании файловых баз 1С, опубликованных на веб-сервере (IIS или Apache).

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

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

База опубликована на веб-сервере IIS

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

Как добиться создания отдельного пула под каждую базу (iis)

База публикуется при помощи обновлятора (iis)

В настройках публикации установите опцию "Использовать индивидуальный пул приложений (iis)":

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

База публикуется вручную (iis)

Зайдите в диспетчер служб IIS:

Создайте новый пул приложений, не забыв установить свойство "Версия среды .NET Framework" в значение "Без управляемого кода".

Пропишите этот пул в свойствах базы:

Как блокировать базу (iis)

Для корректной блокировки нам нужно сначала выгнать всех пользователей и только затем остановить пул приложений базы.

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

Зайдите в свойства базы, закладка "События", закладка "После блокировки":

Событие "После блокировки" (в отличие от события "Перед блокировкой") возникает уже после того, как обновлятор попытался выгнать пользователей из базы. Поэтому именно здесь следует написать скрипт для остановки пула приложений нашей базы.

Здесь возможны следующие варианты.

Обновлятор установлен на том же компьютере, что и веб-сервер iis

В этом случае нажмите на ссылку "обновлятор" на панеле скрипта и выберите из меню "Методы"-"Остановить пул приложений (для веб-сервера iis)":

В редактор вставится следующий скрипт:

@stop_web_app_pool(
    name: ""
)

Этой командой мы просим обновлятор остановить пул приложений с определенным именем на веб-сервере iis. Мы можем здесь или указать нужное имя (параметр name), либо оставить его пустым и тогда обновлятор возьмёт имя пула приложений из настроек публикации базы.

Для разблокировки базы на закладке "После разблокировки" выберем меню "Методы"-"Запустить пул приложений (для веб-сервера iis):

В редактор вставится следующий скрипт:

@start_web_app_pool(
    name: ""
)

Этой командой мы просим обновлятор запустить пул приложений с определенным именем на веб-сервере iis. Мы можем здесь или указать нужное имя (параметр name), либо оставить его пустым и тогда обновлятор возьмёт имя пула приложений из настроек публикации базы.

Обновлятор и веб-сервер iis установлены на разных компьютерах

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

База опубликована на веб-сервере APACHE

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

Как блокировать базу (apache)

Для корректной блокировки нам нужно сначала выгнать всех пользователей и только затем остановить пул приложений базы.

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

Зайдите в свойства базы, закладка "События", закладка "После блокировки":

Событие "После блокировки" (в отличие от события "Перед блокировкой") возникает уже после того, как обновлятор попытался выгнать пользователей из базы. Поэтому именно здесь следует написать скрипт для остановки веб-сервера нашей базы.

Здесь возможны следующие варианты.

Обновлятор установлен на том же компьютере, что и веб-сервер apache (windows)

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

Вот пример такого скрипта:

net stop ApacheServiceName

Вместо ApacheServiceName у вас будет своё имя службы.

Если же этот скрипт уже прописан в настройках веб-публикации базы, то для его вызова достаточно вызывать команду обновлятора:

@stop_web_server()

Соответственно в событии "После разблокировки" укажем:

net start ApacheServiceName

или

@start_web_server()
Обновлятор и веб-сервер apache (windows) установлены на разных компьютерах

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

Вот пример такого скрипта:

sc \\pc stop ApacheServiceName
ping 127.0.0.1 -n 60 > nul

Вместо ApacheServiceName у вас будет своё имя службы. Вместо pc укажите сетевое имя компьютера, на котором установлен веб-сервер.

Так как вызов команды sc несинхронный, мы вынуждены вставить вставить некоторую паузу, чтобы дождаться окончательной остановки сервиса. В данном случае я создал паузу в 60 секунд при помощи команды ping.

Если же этот скрипт уже прописан в настройках веб-публикации базы, то для его вызова достаточно вызывать команду обновлятора:

@stop_web_server()

Соответственно в событии "После разблокировки" укажем:

sc \\pc start ApacheServiceName
ping 127.0.0.1 -n 60 > nul

или

@start_web_server()
Обновлятор и веб-сервер apache (другие ОС) установлены на разных компьютерах

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

Возможные трудности

Если обновлятор запускается под пользователем без прав администратора - необходимо дать пользователю разрешения на запуск и остановку служб, вот инструкция: ссылка.

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



Владимир Милькин
Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.

Нажмите одну из кнопок, чтобы поделиться:



Замечания про Google.Drive

  оглавление  Условия оказания технической поддержки пользователям обновлятора