Azure WebApp配置Always On仍意外关闭,关机原因BinDirChangeOrDirectoryRename
解决Azure WebApp因BinDirChangeOrDirectoryRename意外停止的问题
我之前也碰到过类似的坑,BinDirChangeOrDirectoryRename这个关机原因本质是Web服务器检测到了bin目录或者应用根目录的文件/目录变化,直接触发了应用重启——哪怕你完全没手动修改过文件,很多后台操作都可能导致这个情况。下面是我亲测有效的排查和解决步骤:
一、先找自动变更的源头
- 日志文件写进了敏感目录:很多开发者会把日志输出到bin目录或者网站根目录,比如某些日志框架默认就这么配置,这会直接触发目录变更检测。赶紧检查你的日志配置,把日志输出到Azure专门的日志目录
D:\home\LogFiles,别往应用目录里写。 - 第三方扩展/包在自动更新:你安装的WebApp扩展或者NuGet包可能在后台偷偷修改文件,比如一些监控工具、缓存插件。可以先临时禁用非必要的扩展,或者检查NuGet包的更新机制,改成手动更新试试。
- 部署流程留了尾巴:如果用了持续部署(比如GitHub Actions、Azure DevOps),有时候部署后的清理脚本或者残留操作会修改文件。检查下部署流程,确保部署完成后没有多余的修改操作,比如别在部署后自动修改web.config或者bin目录下的文件。
- 底层存储的元数据波动:Azure WebApp的存储偶尔会有同步延迟或者元数据变化,导致系统误判目录变更。这种情况可以先手动重启一次WebApp,然后观察会不会再出现问题。
二、调整目录变更检测的行为
要是实在找不到源头,可以直接修改配置来规避这个检测:
- ASP.NET Framework项目:在
web.config的system.web节点里添加这段配置,把变更检测的等待时间拉到一天(基本相当于禁用了检测):
注意,这么修改之后,你手动修改文件的话应用不会自动重启,得手动重启WebApp才会生效。<httpRuntime waitChangeNotification="86400" maxWaitChangeNotification="86400" /> - ASP.NET Core项目:在Program.cs里修改WebHost配置,直接关掉文件变更监听:
这样就能避免系统误判文件变更导致的重启。public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>() .UseContentRoot(Directory.GetCurrentDirectory()) .ConfigureAppConfiguration((context, config) => { // 关闭配置文件自动重载 config.AddJsonFile("appsettings.json", reloadOnChange: false); }) .UseSetting(WebHostDefaults.WatchFilesKey, "false"); });
三、用工具深挖细节
- 开启详细诊断日志:在Azure门户的WebApp资源中,打开「诊断设置」,启用「应用服务日志」,把日志级别设为详细,然后去日志里查找关于目录变更的具体记录——比如哪个文件被修改了、修改时间是什么时候,这能帮你精准定位触发源。
- 用Kudu工具查文件变化:访问
https://<你的WebApp名称>.scm.azurewebsites.net,进入「Debug console」→「PowerShell」,执行以下命令:
看看最新修改的文件有没有异常,说不定能找到蛛丝马迹。Get-ChildItem -Path D:\home\site\wwwroot -Recurse | Sort-Object LastWriteTime -Descending
最后提一句,虽然开了Always On,WebApp还是可能因为资源限制、平台更新等原因重启,但你这个明确是目录变更导致的,按上面的步骤排查应该能解决问题。
内容的提问来源于stack exchange,提问作者ino_fleg
相关产品推荐
相关产品推荐

