У нас есть автоматизированный процесс развертывания, который в основном управляется пакетным файлом. Одним из первых шагов в этом процессе является остановка пула приложений IIS, чтобы можно было безопасно скопировать обновленные файлы. Для этого мы вызываем PsExec, например:
PsExec.exe -accepteula %WEB_SERVER_MACHINE_NAME% cmd /c %%systemroot%%\system32\inetsrv\AppCmd.exe stop apppool /apppool.name:"%APP_POOL_NAME%" 2>&1
Где находятся переменные среды (это не фактические значения, просто для иллюстрации):
WEB_SERVER_MACHINE_NAME=\\WEBSERVER01
APP_POOL_NAME=APP01
Весь процесс развертывания обычно занимает всего несколько минут. Однако кажется, что иногда, казалось бы, случайно, этот процесс застревает на этом шаге и, кажется, ждет бесконечно долго. Если я проверю веб-сервер во время этого процесса, AppPool
не останавливается, и остановка вручную AppPool
не имеет никакого эффекта. Необходимо развернуть 6 различных сайтов, и это может произойти на любом из сайтов.
Я также пробовал отключить автозапуск вот так:
PsExec.exe -accepteula %WEB_SERVER_MACHINE_NAME% cmd /c %%systemroot%%\system32\inetsrv\AppCmd.exe set apppool /apppool.name:"%APP_POOL_NAME%" /autoStart:false 2>&1
И иногда, но иногда кажется, что на этом этапе он останавливается. Итак, похоже, проблема с PsExec
скорее, чем AppCmd
. Я также попытался указать тайм-аут подключения к PsExec
а также цепочку выхода в конце cmd
звоните, вот так:
PsExec.exe -accepteula -n 60 %WEB_SERVER_MACHINE_NAME% cmd /c %%systemroot%%\system32\inetsrv\AppCmd.exe stop apppool /apppool.name:"%APP_POOL_NAME%" ^& exit 0 2>&1
Кто-нибудь сталкивался с этой проблемой раньше? Что могло вызвать это PsExec
звонить с перерывами?
Использование WMIC кажется более надежным (хотя и не идеальным). Вот что я в итоге использовал:
wmic /node:"%WEB_SERVER_MACHINE_NAME%" /namespace:\\root\WebAdministration path ApplicationPool where name='%APP_POOL_NAME%' call start
wmic /node:"%WEB_SERVER_MACHINE_NAME%" /namespace:\\root\WebAdministration path ApplicationPool where name='%APP_POOL_NAME%' set AutoStart=true