如何从 .NET Core 控制台应用程序创建 Linux 守护程序?



我习惯于使用Topshelf创建Windows服务。随着 .NET Core 和跨平台的前景,这引发了许多有趣的场景:

  1. 鉴于 Topshelf 尚不支持 .NET Core,如何为 .NET Core 创建 Windows 服务?(一种方法可能是创建一个常规的 .NET Core 控制台应用程序并使用 NSSM 安装它,但这不提供启动/停止的钩子,因此无法正常停止服务)。
  2. 你如何在Linux上做同样的事情?没有Windows服务,但有守护进程的概念。此答案提供了一种基本方法,但需要额外的工作,并且依赖于某些底层软件。
  3. 上面的 #1 和 #2 可以使用跨平台方法完成吗,还是有必要为每个平台解决这个问题(例如使用预处理器指令)?

以上主要只是上下文。出于这个问题的目的,我想知道我需要采取哪些步骤才能使用 .NET Core 在 Linux 上运行等效的 Windows 服务。如果这可以跨平台以统一的方式完成,那就更好了。

我认为没有跨平台的解决方案。服务是特定于平台的,AFAIK。

对于#2,如果您想在systemd下运行.NET Core,您应该能够在没有任何代码更改的情况下执行此操作。您基本上需要做的就是发布应用程序,然后创建一个systemdunit文件来描述您的守护程序。 然后,systemd将处理启动、重新启动和终止应用程序。

这里有一个 systemd 单元文件的示例,用于将 ASP.NET Core 应用程序作为服务运行:https://learn.microsoft.com/en-us/aspnet/core/publishing/apache-proxy#monitoring-our-application

[Unit]
Description=Example .NET Application
[Service]
WorkingDirectory=/var/aspnetcore/hellomvc
ExecStart=/usr/bin/dotnet /var/aspnetcore/hellomvc/hellomvc.dll
Restart=always
RestartSec=10
SyslogIdentifier=dotnet-example
User=apache
Environment=ASPNETCORE_ENVIRONMENT=Production 
[Install]
WantedBy=multi-user.target

最新更新