优雅地终止在 Linux 上运行的 .NET Core 守护进程
- 2024-11-07 08:55:00
- admin 原创
- 30
问题描述:
我创建了一个在 Ubuntu 14.04 机器上作为守护进程运行的 .NET Core 控制台应用程序。
我想在不强制执行的情况下停止该服务,能够处理终止事件。
我怎样才能实现这个目标?
解决方案 1:
自一年前@Stefano 的回答以来,.NET Core 已经有了长足的发展。在 .NET Core 2.0 中,您现在可以使用众所周知的AppDomain.CurrentDomain.ProcessExit
事件代替AssemblyLoadContext.Default.Unloading
。它适用于 Linux 上的控制台应用程序,也适用于 Docker。
解决方案 2:
您希望能够向正在运行的进程发送SIGTERM :
kill <PID>
并且该进程应该处理它以正确关闭。
不幸的是,.NET Core没有很好的文档记录,但它能够处理 Unix 信号(与Mono 的方式不同)。GitHub问题
如果你使用Ubuntu和Upstart,你需要一个 init 脚本,在收到停止请求时发送kill信号:示例 init 脚本
向您的project.json添加依赖项:
"System.Runtime.Loader": "4.0.0"
这将为您提供AssemblyLoadContext。
然后你就可以处理 SIGTERM 事件:
AssemblyLoadContext.Default.Unloading += MethodInvokedOnSigTerm;
笔记:
使用 Mono,正确的处理方式是通过UnixSignal:Mono.Unix.Native.Signum.SIGTERM
编辑:
正如@Marc在他最近的回答中指出的那样,这不再是实现这一目标的最佳方式。从.NET Core 2.0 AppDomain.CurrentDomain.ProcessExit
开始,支持该事件。
相关推荐
热门文章
项目管理软件有哪些?
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件
热门标签
云禅道AD