在 Azure 云服务上安排 IIS 重置

Schedule IIS Reset on Azure Cloud Service

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

我一直在做的是远程进入 VM,将 cmd 文件添加到本地磁盘并创建一个计划任务,运行s cmd 文件:

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

我的问题是,PaaS 服务会定期 "refreshed",所以随机地,我手动发布到云服务 VM 的任何 code\files 都会消失。我需要远程回到机器并重新添加我的 cmd 和计划任务。

我知道云服务允许您 运行 启动任务等。我能否执行类似于启动任务的操作,允许我在发布我的应用程序时打包此 cmd 文件,但在外部安排这些命令?如果是...怎么办?

启动任务可能会执行您在 .cspkg 中包含的任何无人值守 app/installer。您需要确保相关 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>

更好的解决方案是将 AppPool 设置更改为在特定时间回收。从 David Makogan 提到的启动脚本执行此操作。

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

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

一定要取消勾选"regular time interval",否则白天会有回收事件

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

appcmd recycle apppool /apppool.name: Marketing