主にバッチファイルによって管理される自動展開プロセスがあります。このプロセスの最初のステップの1つは、IIS AppPoolを停止して、更新されたファイルを安全にコピーできるようにすることです。これを行うには、次のように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
展開プロセス全体は通常、わずか数分で完了します。ただし、ランダムに見える場合もありますが、このプロセスはこのステップでスタックし、無期限に待機しているように見えます。このプロセス中にWebサーバーを確認しても、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