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

· 9 мин

Содержание

Чтобы перезапустить веб-сервер IIS с опубликованной базой 1С, откройте командную строку от имени администратора и выполните iisreset. Команда остановит и снова запустит все службы IIS. Если публикаций на сервере несколько, а проблема только с одной, точнее и мягче перезапустить её пул приложений: в IIS Manager выберите пул и нажмите «Recycle» (в русской версии — «Перезапустить»).

Перезапуск веб-сервера 1С на IIS помогает, когда веб-клиент или HTTP-сервисы перестали отвечать, после обновления платформы и после правки default.vrd или web.config. Ниже — четыре способа рестарта, от точечного к полному, настройка пулов под 1С и разбор ошибок, которые всплывают после перезапуска.

Что проверить перед перезапуском IIS

Любой рестарт IIS обрывает сеансы веб-клиента и запросы к HTTP- и веб-сервисам 1С. Несохранённый документ в браузере пользователь потеряет. Поэтому сначала пять минут на подготовку.

Перезапуск в рабочее время без предупреждения пользователей — гарантированные потерянные документы и звонки в поддержку. Делайте его в обед, вечером или после рассылки «через 10 минут веб-доступ к 1С будет недоступен 1–2 минуты».

Что выяснить заранее:

  • 🔎 Сколько публикаций на сервере. Откройте inetmgr, раскройте Сайты → Default Web Site и посмотрите виртуальные каталоги. Если там пять баз, а жалуются на одну — полный iisreset не нужен.
  • 🧩 Какой пул обслуживает нужную базу. Щёлкните по публикации, справа выберите «Основные параметры» (Basic Settings) — там указан пул приложений.
  • 🖥 Что ещё крутится на этом IIS. Часто рядом живут веб-интерфейс почты, сайт техподдержки, сервисы обмена с сайтом. iisreset затронет их все.
  • 📋 Есть ли права администратора Windows. Без них ни iisreset, ни консоль управления не сработают.
  • 🗂 Вариант работы базы. Для файловой базы процесс w3wp.exe сам открывает файл 1Cv8.1CD. Для клиент-серверной — подключается к кластеру серверов 1С, и рестарт IIS сам кластер не трогает.

Если проблема в самом кластере 1С (зависший рабочий процесс rphost, «висящие» сеансы), перезапуск IIS её не решит. Рестарт веб-сервера лечит только то, что происходит в процессе w3wp.exe.

Перезапуск IIS и сайта через IIS Manager

Графический способ удобен, когда сервером занимается не администратор, а «продвинутый» бухгалтер или программист 1С. Консоль запускается командой inetmgr (Win+R) или через Диспетчер серверов → Средства → Диспетчер служб IIS.

Перезапуск всего веб-сервера

  1. В левой панели «Подключения» выделите имя сервера (верхний узел дерева).
  2. В правой панели «Действия» нажмите «Перезапустить».
  3. Дождитесь, пока кнопки «Запустить/Остановить» снова станут активны.

Это аналог iisreset, но без перезапуска связанных служб. На практике результат для 1С одинаковый.

Перезапуск одного сайта

  1. Раскройте Сайты и выделите сайт, где лежит публикация (обычно Default Web Site).
  2. Справа в блоке «Управление веб-сайтом» нажмите «Перезапустить».

Перезапуск сайта не выгружает процесс w3wp.exe из памяти. Если 1С «зависла» внутри процесса или нужно освободить загруженную библиотеку wsisapi.dll, перезапуск сайта не поможет. Нужен рестарт пула — о нём ниже.

Быстрый рестарт IIS из командной строки

Командная строка быстрее консоли и пригодна для скриптов. Откройте cmd от имени администратора.

iisreset: полный перезапуск

iisreset /status
iisreset /restart

Первая команда покажет состояние служб, вторая — перезапустит IIS. Полезные ключи:

КлючЧто делает
/stopТолько останавливает службы IIS
/startТолько запускает
/restartОстанавливает и запускает (по умолчанию)
/noforceНе убивать процессы принудительно, если они не завершаются сами
/timeout:30Сколько секунд ждать корректной остановки
/statusПоказать состояние служб

Перезапуск службы W3SVC

Можно перезапустить только службу веб-публикаций, не трогая остальное:

net stop w3svc
net start w3svc

appcmd: точечные команды

Утилита appcmd.exe лежит в %windir%\system32\inetsrv\. Она управляет отдельными сайтами и пулами:

cd /d %windir%\system32\inetsrv
appcmd list site
appcmd stop site /site.name:"Default Web Site"
appcmd start site /site.name:"Default Web Site"

Какой способ выбрать

СитуацияСпособКого заденет
Зависла одна база в веб-клиентеRecycle её пулаТолько пользователей этой базы
Поменяли default.vrd одной публикацииRecycle пула или перезапуск сайтаПул или сайт целиком
Обновили платформу 1СОстановка и запуск пулов 1СВсе публикации 1С
Не отвечает ни один сайт на сервереiisreset /restartВсе сайты и пулы IIS
iisreset повис на остановкеtaskkill процесса w3wp.exeСеансы обрываются мгновенно

iisreset — кувалда. Им удобно лечить всё сразу, но он перезапускает все сайты и все пулы. Если на сервере больше одной публикации 1С, начинайте с пула.

Пулы приложений для публикаций 1С: рестарт и настройка

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

Как перезапустить пул

В IIS Manager: Пулы приложений → выделите пул → справа «Перезапустить» (Recycle). Либо «Остановить» и затем «Запустить», если нужно гарантированно выгрузить процесс.

Из командной строки:

cd /d %windir%\system32\inetsrv
appcmd list apppool
appcmd recycle apppool /apppool.name:"1C_Buh"
appcmd stop apppool /apppool.name:"1C_Buh"
appcmd start apppool /apppool.name:"1C_Buh"

Чтобы увидеть, какой процесс w3wp.exe принадлежит какому пулу, выполните appcmd list wp. Команда выведет PID и имя пула. Если пул не останавливается, процесс с этим PID можно завершить через taskkill /PID <номер> /F. Это аварийная мера: все сеансы пула оборвутся мгновенно.

Отдельный пул под каждую базу

Публикация через webinst или через Конфигуратор (Администрирование → Публикация на веб-сервере) по умолчанию кладёт базу в DefaultAppPool. Когда баз несколько, лучше завести каждой свой пул:

  1. Пулы приложений → Добавить пул приложений, имя — например, 1C_ZUP.
  2. Выделите публикацию → «Основные параметры» → «Выбрать» → укажите новый пул.
  3. Выдайте учётной записи пула (IIS AppPool\1C_ZUP) права на чтение каталога bin платформы, а для файловой базы — на изменение каталога базы.

Теперь зависание одной базы лечится рестартом её пула, а остальные пользователи ничего не замечают.

Параметры пула, которые важны для 1С

Открываются через «Дополнительные параметры» пула:

ПараметрЧто поставитьЗачем
Разрешить 32-разрядные приложенияTrue, если установлен 32-битный модуль веб-расширенияИначе ошибка 500 при загрузке wsisapi.dll
Время простоя (минуты)0 или больше длины рабочего дняЧтобы пул не засыпал через 20 минут простоя и первый вход утром не тормозил
Регулярный интервал времени (минуты)0Отключает перезапуск каждые 1740 минут посреди дня
Определённое времяНочное, например 03:00Плановый перезапуск, когда никто не работает
Запретить перекрывающееся повторное использованиеTrue для файловых базНе даёт двум процессам w3wp.exe одновременно открыть файл базы

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

Как перезапускать IIS по расписанию через PowerShell

Когда нужен регулярный рестарт с логированием или проверкой результата, удобнее PowerShell. Запускайте его от имени администратора.

Базовые команды модуля WebAdministration

Import-Module WebAdministration

# состояние всех пулов
Get-ChildItem IIS:\AppPools | Select-Object Name, State

# перезапуск одного пула
Restart-WebAppPool -Name "1C_Buh"

# остановка и запуск сайта
Stop-Website -Name "Default Web Site"
Start-Website -Name "Default Web Site"

# перезапуск службы целиком
Restart-Service W3SVC

Скрипт: перезапуск всех пулов 1С

Если пулы называются с общим префиксом (1C_…), один скрипт перезапустит их все и запишет результат в журнал:

Import-Module WebAdministration
$log = "C:\Scripts\iis-1c-restart.log"

Get-ChildItem IIS:\AppPools | Where-Object { $_.Name -like "1C_*" } | ForEach-Object {
    $name = $_.Name
    if ((Get-WebAppPoolState -Name $name).Value -eq "Started") {
        Restart-WebAppPool -Name $name
    } else {
        Start-WebAppPool -Name $name
    }
    Start-Sleep -Seconds 3
    $state = (Get-WebAppPoolState -Name $name).Value
    Add-Content $log "$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss') $name -> $state"
}

Пул в состоянии «Stopped» скрипт не перезапускает, а запускает: Restart-WebAppPool на остановленном пуле выдаст ошибку.

Запуск по расписанию

Сохраните скрипт как C:\Scripts\restart-1c-pools.ps1 и создайте задание в Планировщике заданий Windows:

schtasks /Create /TN "Restart 1C IIS pools" /SC DAILY /ST 03:00 /RU SYSTEM /RL HIGHEST ^
  /TR "powershell.exe -NoProfile -ExecutionPolicy Bypass -File C:\Scripts\restart-1c-pools.ps1"

Если нужен только ночной перезапуск без журнала, проще задать время в параметре пула «Определённое время» (см. таблицу выше). Скрипт оправдан, когда нужна проверка состояния, уведомление или перезапуск нескольких серверов разом.

Когда без рестарта IIS не обойтись: обновление платформы

Самый частый плановый повод — смена версии платформы 1С на веб-сервере. Модуль wsisapi.dll загружен в память процесса w3wp.exe и заблокирован, пока пул работает. Отсюда порядок:

  1. Остановите пулы публикаций 1С (appcmd stop apppool или «Остановить» в консоли).
  2. Установите новую версию платформы с компонентом «Модули расширения веб-сервера».
  3. Обновите путь к модулю в публикации. Проще всего — переопубликовать базу из Конфигуратора новой версии или через webinst из каталога bin новой версии. Путь к wsisapi.dll прописан в web.config публикации, и при смене версии он должен указывать на новый каталог.
  4. Запустите пулы и откройте базу в браузере.

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

Ошибки после перезапуска IIS и как их разобрать

Рестарт иногда не лечит, а проявляет проблему: процесс поднимается, падает и пул отключается. Первым делом смотрите журнал Windows: Просмотр событий → Журналы Windows → Система, источник WAS, и журнал «Приложение». Журналы запросов IIS лежат в %SystemDrive%\inetpub\logs\LogFiles.

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

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

Частые вопросы о перезапуске IIS для 1С

Нужно ли перезагружать весь Windows Server, чтобы перезапустить IIS?
Нет. iisreset или рестарт пула решают задачу за секунды. Перезагрузка сервера нужна, только если зависла сама Windows или этого требует установка обновлений.
Перезапуск IIS удаляет данные в базе 1С?
Нет. Данные хранятся в базе, а не в IIS. Теряются только несохранённые изменения в открытых формах веб-клиента.
Можно ли перезапустить IIS, если 1С работает через тонкий клиент по сети?
Можно. Тонкий клиент, подключённый к кластеру напрямую, IIS не использует и рестарта не заметит. Пострадают только те, кто входит через браузер или по HTTP-адресу.
Чем recycle пула отличается от остановки и запуска?
Recycle поднимает новый процесс до того, как погасить старый, поэтому пауза почти незаметна. Остановка и запуск гарантированно выгружают процесс, но дают короткий простой.
Как перезапустить IIS удалённо?
Через PowerShell: Invoke-Command -ComputerName SRV-WEB -ScriptBlock { iisreset /restart }. На целевом сервере должен быть включён WinRM, а у вас — права администратора.