2016-08-01 62 views
3

我有一个Azure云服务,当应用程序池联机时(通常为5-10分钟),需要进行一些预热。因此,我喜欢在下班时间安排IIS \ App Pool回收。当我的回收发生在中午时,我得到用户对我大喊(我不喜欢大吼)安排Azure云服务上的IIS重置

我一直在做的是远程处理进入虚拟机,添加一个cmd文件到本地磁盘和创建运行CMD文件中的计划任务:

net stop "World Wide Web Publishing Service" 
net start "World Wide Web Publishing Service" 

我的问题是,周期性的PaaS服务得到“刷新”,那么随机,任何代码\文件我手动发布到云服务VM消失。我需要远程回到机器并重新添加我的cmd和计划任务。

我知道云服务允许你运行启动任务等。我可以做类似于启动任务的东西,以便在发布我的应用程序时打包此cmd文件,但在外部调度这些命令?如果是的话......怎么样?

回答

1

启动任务可能会执行您包含在您的.cspkg中的任何无人值守应用程序/安装程序。您需要确保cmd文件已正确捆绑(例如,将configureSchedule.cmd添加到项目中,确保将其复制到输出目录中)。

既然你试图建立调度,你可能需要在提升模式下运行cmd

<Startup> 
    <Task commandLine="configureSchedule.cmd" executionContext="elevated" taskType="simple" > 
     <Environment> 
      <Variable name="MyVersionNumber" value="1.0.0.0" /> 
     </Environment> 
    </Task> 
</Startup> 
+0

谢谢@DavidMakogon!我会给这个旗杆跑,但非常感谢 – ewitkows

0

更好的解决办法是改变应用程序池设置在特定的时间来回收。从像David Makogan这样的启动脚本中提到这一点。

到这里看看: Set default app pool recycling via command line

设置回收时间: https://www.iis.net/configreference/system.applicationhost/applicationpools/add/recycling/periodicrestart

enter image description here

一定要取消选中“常规时间间隔”,否则会出现在回收事件天。

此外,您正在停止WWW服务,更快的方法是只回收应用程序池。这样一个新的应用程序池启动,而旧的应用程序池处理用户的最后一个请求。所以有(几乎)没有连接损失

appcmd recycle apppool /apppool.name: Marketing 
+0

感谢信息@ErikOppedijk。我的问题是,定期VM被“重置”,我做的自定义更改 - 例如手动将文件添加到云服务VM上的驱动器 - 将消失。所以目前,我需要远程回到机器并手动重新工作,这正是我试图避免的。此外,感谢appcmd上的提示,但我的应用程序池名称始终是随机生成的,这不幸地导致该解决方案的问题。 – ewitkows

+0

上述脚本必须放置在启动脚本中,如David提到的。优点是这是本机IIS功能。 –