我有一些批处理启动任务。特别地,我调用IIS的
我的问题是,如何使这些启动任务成为幂等的?是否有一种方法可以使appcmd.exe不抛出错误?是否有一种方法可以使shell捕获错误?是否有一种方法可以使Azure框架忽略错误?
以下是我的启动任务示例。所有内容都包含在一个命令文件
appcmd.exe
来配置IIS。Azure中的启动任务应该是幂等的(即能够重复运行并产生相同的结果),以防角色出现某些原因而重新启动。不幸的是,我的许多IIS配置命令第二次运行时将失败,例如因为它们在第一次删除了一个配置节点,然后在后续运行中不存在该节点。我的问题是,如何使这些启动任务成为幂等的?是否有一种方法可以使appcmd.exe不抛出错误?是否有一种方法可以使shell捕获错误?是否有一种方法可以使Azure框架忽略错误?
以下是我的启动任务示例。所有内容都包含在一个命令文件
configiis.cmd
中。@REM Enable IIS compression for application/json MIME type
%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/httpCompression /+"dynamicTypes.[mimeType='application/json',enabled='True']" /commit:apphost
%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/httpCompression /+"dynamicTypes.[mimeType='application/json; charset=utf-8',enabled='True']" /commit:apphost
@REM Set IIS to automatically start AppPools
%windir%\system32\inetsrv\appcmd.exe set config -section:applicationPools -applicationPoolDefaults.startMode:AlwaysRunning /commit:apphost
@REM Set IIS to not shut down idle AppPools
%windir%\system32\inetsrv\appcmd set config -section:applicationPools -applicationPoolDefaults.processModel.idleTimeout:00:00:00 /commit:apphost
@REM But don't automatically start the AppPools that we don't use, and do shut them down when idle
%windir%\system32\inetsrv\appcmd.exe set config -section:system.applicationHost/applicationPools "/[name='Classic .NET AppPool'].startMode:OnDemand" "/[name='Classic .NET AppPool'].autoStart:False" "/[name='Classic .NET AppPool'].processModel.idleTimeout:00:01:00" /commit:apphost
%windir%\system32\inetsrv\appcmd.exe set config -section:system.applicationHost/applicationPools "/[name='ASP.NET v4.0'].startMode:OnDemand" "/[name='ASP.NET v4.0'].autoStart:False" "/[name='ASP.NET v4.0'].processModel.idleTimeout:00:01:00" /commit:apphost
%windir%\system32\inetsrv\appcmd.exe set config -section:system.applicationHost/applicationPools "/[name='ASP.NET v4.0 Classic'].startMode:OnDemand" "/[name='ASP.NET v4.0 Classic'].autoStart:False" "/[name='ASP.NET v4.0 Classic'].processModel.idleTimeout:00:01:00" /commit:apphost
@REM remove IIS response headers
%windir%\system32\inetsrv\appcmd.exe set config /section:httpProtocol /-customHeaders.[name='X-Powered-By']