Остановка публикации 1С на Apache и IIS без потери данных пользователей

· 10 мин

Содержание

Чтобы остановить веб-сервер 1С, останавливают саму службу веб-сервера: в Linux — sudo systemctl stop apache2 (или httpd в CentOS и RHEL), в Windows с Apache — net stop Apache2.4, с IIS — iisreset /stop или остановку пула приложений базы. Отдельной службы «веб-сервер 1С» нет: модуль расширения 1С (wsap24 для Apache, wsisapi.dll для IIS) живёт внутри процессов веб-сервера и останавливается вместе с ними.

Частое заблуждение — что вместе с веб-сервером останавливается и сервер 1С. Это не так. Служба агента сервера 1С и рабочие процессы rphost продолжают работать, пользователи толстого и тонкого клиента по TCP не заметят ничего. Отвалятся только веб-клиент, тонкий клиент через HTTP, мобильные приложения, HTTP- и веб-сервисы базы.

Что сделать до остановки веб-сервера 1С

Остановка веб-сервера рвёт все HTTP-подключения сразу. Пользователь веб-клиента, который в этот момент заполнял документ, потеряет незаписанные изменения. Обмен через веб-сервис, пришедший посреди выгрузки, завершится ошибкой у другой стороны.

Останавливайте веб-сервер в согласованное окно: ночью, в обед или после рассылки. Предупредите пользователей заранее, что сеансы через браузер и HTTP оборвутся.

Порядок подготовки:

  1. Определите, кто работает через веб. В консоли кластера откройте Информационные базы → <база> → Сеансы и посмотрите колонку «Приложение»: веб-клиент и сервисы видны там отдельно от тонкого клиента.
  2. Выясните, какие внешние системы ходят в базу по HTTP: сайт, обмен с маркетплейсом, мобильная касса, интеграция через OData. Их владельцев тоже стоит предупредить.
  3. Если на этом веб-сервере опубликовано несколько баз, решите: нужно остановить всё или только одну публикацию. Для одной базы есть способы мягче, чем остановка службы.
  4. При необходимости включите блокировку начала сеансов, чтобы за время работ никто не зашёл заново.

Как понять, какой веб-сервер у вас стоит

ПризнакГде смотреть
Служба Apache2.4 в Windowsservices.msc или sc query Apache2.4
Служба W3SVC (Служба веб-публикаций)services.msc, Диспетчер служб IIS
Пакет apache2 или httpd в Linuxsystemctl status apache2 / systemctl status httpd
Строки LoadModule _1cws_module в конфигеhttpd.conf или apache2.conf
Файл default.vrd в каталоге публикацииПапка, указанная при публикации

Если в вашей схеме есть Nginx — он почти всегда стоит перед Apache или IIS как обратный прокси и сам модуля 1С не содержит. Остановка Nginx (systemctl stop nginx) закроет доступ снаружи, но публикация на Apache внутри сети продолжит работать.

Остановка Apache с публикацией 1С в Linux

В Ubuntu и Debian служба называется apache2, в CentOS, RHEL, РЕД ОС и Альт — чаще httpd. Команды одинаковые, меняется только имя.

# узнать состояние
sudo systemctl status apache2

# обычная остановка
sudo systemctl stop apache2

# мягкая остановка: дождаться окончания текущих запросов
sudo apachectl -k graceful-stop

# запуск обратно
sudo systemctl start apache2

Разница между stop и graceful-stop практическая. Обычная остановка прерывает запросы сразу. Мягкая даёт текущим запросам завершиться, а новые не принимает. Для 1С это полезно, когда идёт длинный вызов веб-сервиса: формирование выгрузки на сайт, загрузка пакета документов.

Если нужно лишь перечитать конфигурацию после новой публикации, останавливать сервер не обязательно. Хватит sudo systemctl reload apache2 или sudo apachectl -k graceful. Но после обновления платформы 1С, когда меняется путь к модулю wsap24.so, нужен полный перезапуск.

Чтобы Apache не поднялся сам после перезагрузки сервера, отключите автозапуск: sudo systemctl disable apache2. Вернуть — sudo systemctl enable apache2.

Apache в Windows

Если Apache 2.4 установлен службой в Windows, остановить его можно тремя способами:

  • 🖱 через оснастку services.msc — служба Apache2.4, кнопка «Остановить»;
  • ⌨ из командной строки администратора: net stop Apache2.4;
  • ⚙ средствами самого Apache: httpd.exe -k stop -n "Apache2.4" из каталога bin.

Имя службы может отличаться, если при установке его меняли. Точное имя покажет sc query state= all | findstr /i apache.

Как остановить IIS и пул приложений базы 1С

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

Что останавливаемКомандаКого затронет
Весь IISiisreset /stopВсе сайты и все базы на сервере
Сайтappcmd stop site /site.name:"Default Web Site"Все публикации внутри сайта
Пул приложенийappcmd stop apppool /apppool.name:"Пул1С"Только приложения этого пула

appcmd лежит в %windir%\system32\inetsrv\. Запускайте командную строку от имени администратора, иначе получите отказ в доступе.

Пошагово через Диспетчер служб IIS

  1. Откройте Диспетчер служб IIS (команда inetmgr).
  2. Разверните сервер и выберите «Пулы приложений».
  3. Найдите пул, в котором работает публикация 1С. Какой пул у приложения, видно в его основных настройках.
  4. В правой панели нажмите «Остановить». Состояние сменится на «Остановлен».
  5. Для запуска — «Запустить» там же.

Тот же результат даёт PowerShell с модулем WebAdministration:

Import-Module WebAdministration
Stop-WebAppPool -Name "Пул1С"
Get-WebAppPoolState -Name "Пул1С"
Start-WebAppPool -Name "Пул1С"

Публикации 1С удобно выносить в отдельный пул для каждой базы. Тогда остановка или перезапуск одной базы не трогает остальные, а зависший процесс w3wp.exe легко найти по пулу.

Вместо остановки пула часто достаточно «Перезапуска» (recycle). IIS поднимает новый рабочий процесс и плавно передаёт ему запросы. Это помогает, когда веб-клиент начал зависать, а сервер 1С при этом работает нормально.

Отключить публикацию одной базы без остановки веб-сервера

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

Через Конфигуратор:

  1. Откройте базу в Конфигураторе от имени администратора Windows (на Linux — от пользователя с правами на конфиги Apache).
  2. Выберите Администрирование → Публикация на веб-сервере.
  3. Проверьте имя публикации и веб-сервер в полях формы.
  4. Нажмите «Отключить». Конфигуратор уберёт описание публикации из конфигурации веб-сервера.
  5. Для Apache выполните перезапуск или reload, чтобы изменения вступили в силу.

Через утилиту webinst из каталога bin платформы — удобно на сервере без графики:

webinst -delete -apache24 -wsdir buh -dir "C:\inetpub\buh" -confpath "C:\Apache24\conf\httpd.conf"

Здесь buh — имя публикации. Для IIS вместо -apache24 указывают -iis. Полный список ключей выводит запуск webinst без параметров. Перед удалением сохраните копию default.vrd: в нём лежит строка подключения и настройки публикации, которые потом проще вернуть из файла, чем вспоминать.

Что делать с сеансами в консоли администрирования серверов 1С

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

Как их закрыть вручную:

  1. Откройте Администрирование серверов 1С Предприятия (оснастка консоли).
  2. Разверните Центральные серверы 1С:Предприятия → <сервер> → Кластеры → <кластер> → Информационные базы → <база> → Сеансы.
  3. Отсортируйте по колонке «Приложение» и выделите сеансы веб-клиента и сервисов.
  4. Правой кнопкой — «Удалить». Сеанс будет завершён, пользователь при следующем действии увидит сообщение о разрыве соединения.

Удаление сеанса — это обрыв работы человека без сохранения. Делайте это только после того, как веб-сервер уже остановлен и пользователи предупреждены.

Чтобы за время работ никто не подключился через тонкий клиент, в свойствах базы в консоли включите флажок «Блокировка начала сеансов включена», задайте время, текст сообщения и код разрешения. Код позволит администратору войти в заблокированную базу, добавив его в строку подключения как /UC<код>.

Если консоль не открывается

Типичная ситуация после обновления платформы: оснастка выдаёт ошибку при открытии или показывает пустое дерево. Причина — не зарегистрирована библиотека консоли новой версии. Регистрируют её из командной строки администратора:

regsvr32 "C:\Program Files\1cv8\8.3.25.1286\bin\radmin.dll"

Номер версии подставьте свой: он должен совпадать с номером запущенного агента сервера. Если в системе стоят 32- и 64-разрядная платформы, регистрируйте radmin.dll той же разрядности, что у консоли.

На Linux без графики те же действия делают через rac. Для получения списков подойдут rac cluster list и rac session list --cluster=<id>, для завершения — rac session terminate. Точный набор параметров для вашей версии смотрите в rac help session. Перед этим должна быть запущена служба ras.

Если веб-сервер не останавливается или не запускается после остановки

Диагностика: выберите симптом

Логи, которые стоит открыть первыми:

  • 📄 Apache в Linux — /var/log/apache2/error.log или /var/log/httpd/error_log;
  • 📄 Apache в Windows — logs\error.log в каталоге установки;
  • 📄 IIS — журнал «Приложение» в eventvwr.msc и каталог %SystemDrive%\inetpub\logs\LogFiles;
  • 📄 состояние службы в Linux — journalctl -u apache2 -n 50.

Автоматическая остановка и запуск веб-сервера 1С по расписанию

Ночное резервное копирование, обновление конфигурации, перенос базы — задачи, где остановку веб-сервера удобно поручить скрипту.

Windows: bat-файл и Планировщик заданий

@echo off
rem Остановка публикации 1С перед ночным обслуживанием
set LOG=C:\scripts\web1c.log
echo %date% %time% stop >> %LOG%

net stop Apache2.4 >> %LOG% 2>&1
rem для IIS вместо строки выше:
rem %windir%\system32\inetsrv\appcmd stop apppool /apppool.name:"Пул1С" >> %LOG% 2>&1

rem ... здесь резервная копия или обновление ...

net start Apache2.4 >> %LOG% 2>&1
echo %date% %time% start >> %LOG%

В Планировщике заданий создайте задачу с запуском «от имени администратора» и галочкой «Выполнять с наивысшими правами». Без них net stop вернёт «Системная ошибка 5. Отказано в доступе».

Linux: systemd-таймер или cron

Простой вариант — две строки в crontab -e пользователя root:

# остановить в 01:00, запустить в 03:00
0 1 * * * /usr/bin/systemctl stop apache2
0 3 * * * /usr/bin/systemctl start apache2

Надёжнее держать остановку, обслуживание и запуск в одном скрипте. Тогда запуск не случится раньше, чем закончится копирование, а при ошибке скрипт может вернуть службу в работу и отправить уведомление.

В скрипт после запуска добавьте проверку: curl -s -o /dev/null -w "%{http_code}" http://localhost/buh/ должен вернуть код 200 или 401. Код 500 или отказ соединения — сигнал, что публикация не поднялась.

Перед плановой остановкой веб-сервера 1С
Выполнено: 0 / 5

Частые вопросы

Остановится ли сервер 1С, если остановить Apache или IIS?
Нет. Агент сервера 1С и рабочие процессы продолжат работу. Пользователи тонкого и толстого клиента, подключённые напрямую к кластеру, ничего не заметят.
Чем отличается остановка веб-сервера от отключения публикации?
Остановка службы закрывает все сайты и базы на этом сервере. Отключение публикации убирает доступ только к одной базе, остальные продолжают работать.
Нужно ли останавливать веб-сервер перед обновлением конфигурации?
Если обновление требует монопольного доступа, сеансы веб-клиента и сервисов мешают так же, как обычные. Проще всего временно остановить пул или публикацию этой базы и завершить оставшиеся сеансы.
Сколько ждать после остановки, прежде чем сеансы пропадут из консоли?
Это зависит от настроек кластера и типа сеанса. Не ждите: если сеанс мешает, удалите его в консоли вручную.
Можно ли остановить веб-сервер 1С без прав администратора?
Нет. Управление службами Windows и systemd требует прав администратора или root, а изменение публикации — прав на запись в конфигурацию веб-сервера.