.NET 5.0应用随机重启是否与FCN文件变更通知机制有关?
.NET 5 FCN机制说明及随机重启问题处理
.NET 5 保留了和经典ASP.NET类似的文件更改通知(FCN)机制,但实现逻辑与.NET Framework版本存在差异,默认会监控应用根目录及子目录下的所有文件、文件夹变更,符合条件的变更会触发应用重启。
你遇到的现象属于典型的FCN触发场景:如果日志存储目录位于应用工作目录(或站点根目录的子目录)范围内,日志滚动生成、修改、删除文件的操作都会被FCN监听到,当变更次数达到内置阈值后就会触发应用重启,此时仅会输出Application is shutting down..日志,系统事件日志不会留存额外报错信息。
调整FCN行为的配置方式
和经典ASP.NET通过httpRuntime节点配置fcnMode的方式不同,.NET 5 按托管方式不同有两种配置路径:
- IIS托管场景:在项目的
Web.config文件的aspNetCore节点下添加fcnMode属性即可,可选值包括Disabled(完全禁用FCN)、Single(仅监控根目录变更,子目录变更不触发重启)、NotSet(默认值,全目录监控),示例配置如下:
<configuration> <system.webServer> <aspNetCore processPath="dotnet" arguments=".\你的应用名称.dll" fcnMode="Single" /> </system.webServer> </configuration>
- 自托管(Kestrel直接运行)场景:可以通过两种方式调整:
- 设置环境变量
ASPNETCORE_hostBuilder__reloadConfigOnChange为false,禁用配置文件重载触发的重启 - 在
Program.cs构建WebHost时自定义文件提供器,将日志目录排除在应用监控范围外
- 设置环境变量
最佳实践建议
- 优先将日志存储目录移出应用站点根目录/工作目录范围,尤其是你使用共享文件夹存储日志的场景,不要将共享文件夹挂载到站点根目录的子目录下,从根源上避免日志滚动变更触发FCN
- 如果必须将日志放在站点目录内,建议将
fcnMode设置为Single,仅监控根目录变更,比完全禁用FCN更安全,不会影响正常的配置文件修改生效逻辑
内容的提问来源于stack exchange,提问作者berlaga
相关产品推荐
相关产品推荐

