Как перезапустить IIS с публикацией 1С и не уронить всех пользователей
Содержание
Чтобы перезапустить веб-сервер
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.
Перезапуск всего веб-сервера
- В левой панели «Подключения» выделите имя сервера (верхний узел дерева).
- В правой панели «Действия» нажмите «Перезапустить».
- Дождитесь, пока кнопки «Запустить/Остановить» снова станут активны.
Это аналог iisreset, но без перезапуска связанных служб. На практике результат для 1С одинаковый.
Перезапуск одного сайта
- Раскройте
Сайтыи выделите сайт, где лежит публикация (обычноDefault Web Site). - Справа в блоке «Управление веб-сайтом» нажмите «Перезапустить».
Перезапуск сайта не выгружает процесс 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. Когда баз несколько, лучше завести каждой свой пул:
Пулы приложений → Добавить пул приложений, имя — например,1C_ZUP.- Выделите публикацию → «Основные параметры» → «Выбрать» → укажите новый пул.
- Выдайте учётной записи пула (
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С (
appcmd stop apppoolили «Остановить» в консоли). - Установите новую версию платформы с компонентом «Модули расширения веб-сервера».
- Обновите путь к модулю в публикации. Проще всего — переопубликовать базу из Конфигуратора новой версии или через
webinstиз каталогаbinновой версии. Путь кwsisapi.dllпрописан вweb.configпубликации, и при смене версии он должен указывать на новый каталог. - Запустите пулы и откройте базу в браузере.
Если пропустить шаг 3, веб-клиент продолжит работать на старой версии платформы, а клиент-серверная база может отказать в подключении из-за несовпадения версий с кластером.
Ошибки после перезапуска IIS и как их разобрать
Рестарт иногда не лечит, а проявляет проблему: процесс поднимается, падает и пул отключается. Первым делом смотрите журнал Windows: Просмотр событий → Журналы Windows → Система, источник WAS, и журнал «Приложение». Журналы запросов IIS лежат в %SystemDrive%\inetpub\logs\LogFiles.
После аварийного рестарта IIS в клиент-серверной базе записи о сеансах веб-клиента могут ещё какое-то время висеть в консоли кластера и занимать лицензии. Не спешите удалять их вручную, если пользователи уже переподключились: кластер сам уберёт неактивные сеансы.
Частые вопросы о перезапуске IIS для 1С
Нужно ли перезагружать весь Windows Server, чтобы перезапустить IIS?
iisreset или рестарт пула решают задачу за секунды. Перезагрузка сервера нужна, только если зависла сама Windows или этого требует установка обновлений.Перезапуск IIS удаляет данные в базе 1С?
Можно ли перезапустить IIS, если 1С работает через тонкий клиент по сети?
Чем recycle пула отличается от остановки и запуска?
Как перезапустить IIS удалённо?
Invoke-Command -ComputerName SRV-WEB -ScriptBlock { iisreset /restart }. На целевом сервере должен быть включён WinRM, а у вас — права администратора.