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

我习惯于使用Topshelf创buildWindows服务。 使用.NET Core和跨平台的前景,这引发了一些有趣的场景:

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

以上主要是上下文。 为了解决这个问题,我想知道为了在Linux上使用.NET Core运行Windows服务,需要采取哪些步骤。 如果这可以跨平台统一完成,甚至更好。

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

对于#2,如果要在systemd下运行.NET Core,则应该可以在不进行任何代码更改的情况下执行此操作。 你基本上需要做的是发布你的应用程序,然后创建一个systemd unit文件来描述你的守护进程。 systemd将处理启动,重新启动和杀死您的应用程序。

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

 [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