Остановка публикации 1С на Apache и IIS без потери данных пользователей
Содержание
Чтобы остановить веб-сервер 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 оборвутся.
Порядок подготовки:
- Определите, кто работает через веб. В консоли кластера откройте
Информационные базы → <база> → Сеансыи посмотрите колонку «Приложение»: веб-клиент и сервисы видны там отдельно от тонкого клиента. - Выясните, какие внешние системы ходят в базу по HTTP: сайт, обмен с маркетплейсом, мобильная касса, интеграция через OData. Их владельцев тоже стоит предупредить.
- Если на этом веб-сервере опубликовано несколько баз, решите: нужно остановить всё или только одну публикацию. Для одной базы есть способы мягче, чем остановка службы.
- При необходимости включите блокировку начала сеансов, чтобы за время работ никто не зашёл заново.
Как понять, какой веб-сервер у вас стоит
| Признак | Где смотреть |
|---|---|
Служба Apache2.4 в Windows | services.msc или sc query Apache2.4 |
Служба W3SVC (Служба веб-публикаций) | services.msc, Диспетчер служб IIS |
Пакет apache2 или httpd в Linux | systemctl 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 есть три уровня остановки. Выбирайте самый узкий, который решает задачу.
| Что останавливаем | Команда | Кого затронет |
|---|---|---|
| Весь IIS | iisreset /stop | Все сайты и все базы на сервере |
| Сайт | appcmd stop site /site.name:"Default Web Site" | Все публикации внутри сайта |
| Пул приложений | appcmd stop apppool /apppool.name:"Пул1С" | Только приложения этого пула |
appcmd лежит в %windir%\system32\inetsrv\. Запускайте командную строку от имени администратора, иначе получите отказ в доступе.
Пошагово через Диспетчер служб IIS
- Откройте
Диспетчер служб IIS(командаinetmgr). - Разверните сервер и выберите «Пулы приложений».
- Найдите пул, в котором работает публикация 1С. Какой пул у приложения, видно в его основных настройках.
- В правой панели нажмите «Остановить». Состояние сменится на «Остановлен».
- Для запуска — «Запустить» там же.
Тот же результат даёт PowerShell с модулем WebAdministration:
Import-Module WebAdministration
Stop-WebAppPool -Name "Пул1С"
Get-WebAppPoolState -Name "Пул1С"
Start-WebAppPool -Name "Пул1С"
Публикации 1С удобно выносить в отдельный пул для каждой базы. Тогда остановка или перезапуск одной базы не трогает остальные, а зависший процесс w3wp.exe легко найти по пулу.
Вместо остановки пула часто достаточно «Перезапуска» (recycle). IIS поднимает новый рабочий процесс и плавно передаёт ему запросы. Это помогает, когда веб-клиент начал зависать, а сервер 1С при этом работает нормально.
Отключить публикацию одной базы без остановки веб-сервера
Если на веб-сервере опубликовано пять баз, а работы нужны в одной, гасить весь Apache незачем. Публикацию отключают точечно.
Через Конфигуратор:
- Откройте базу в Конфигураторе от имени администратора Windows (на Linux — от пользователя с правами на конфиги Apache).
- Выберите
Администрирование → Публикация на веб-сервере. - Проверьте имя публикации и веб-сервер в полях формы.
- Нажмите «Отключить». Конфигуратор уберёт описание публикации из конфигурации веб-сервера.
- Для 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С:Предприятия → <сервер> → Кластеры → <кластер> → Информационные базы → <база> → Сеансы. - Отсортируйте по колонке «Приложение» и выделите сеансы веб-клиента и сервисов.
- Правой кнопкой — «Удалить». Сеанс будет завершён, пользователь при следующем действии увидит сообщение о разрыве соединения.
Удаление сеанса — это обрыв работы человека без сохранения. Делайте это только после того, как веб-сервер уже остановлен и пользователи предупреждены.
Чтобы за время работ никто не подключился через тонкий клиент, в свойствах базы в консоли включите флажок «Блокировка начала сеансов включена», задайте время, текст сообщения и код разрешения. Код позволит администратору войти в заблокированную базу, добавив его в строку подключения как /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.
Если веб-сервер не останавливается или не запускается после остановки
httpd.exe или w3wp.exe в диспетчере задач или командой tasklist | findstr /i "httpd w3wp" и завершите их: taskkill /IM w3wp.exe /F. На Linux — sudo pkill -9 apache2 (или httpd). Все незавершённые запросы при этом теряются.netstat -ano | findstr :80, в Linux sudo ss -tlnp | grep ':80 '. Если в Windows порт занят процессом System (PID 4) — это служба HTTP IIS. Остановите IIS или переведите Apache на другой порт в httpd.conf.httpd.conf осталась строка LoadModule со старым путём к модулю wsap24. Проверьте конфигурацию командой httpd -t (в Linux apachectl configtest) и переопубликуйте базу из Конфигуратора новой версии. Разрядность модуля должна совпадать с разрядностью Apache.rac, как описано выше. Фоновые и регламентные задания к веб-серверу отношения не имеют — их блокируют отдельным флажком в свойствах базы.Логи, которые стоит открыть первыми:
- 📄 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 или отказ соединения — сигнал, что публикация не поднялась.