2017-05-16 129 views
5

我習慣使用Topshelf創建Windows服務。使用.NET核心和跨平臺的前景,這引發了一些有趣的場景:如何從.NET Core控制檯應用程序創建Linux守護進程?

  1. 鑑於Topshelf還不支持.NET Core,我如何爲.NET Core創建Windows服務? (一種方法可能是創建一個常規的.NET Core控制檯應用程序並使用NSSM進行安裝,但這不會爲啓動/停止提供掛鉤,因此無法正常停止該服務)。
  2. 你如何在Linux上做同樣的事情?沒有Windows服務,但有守護進程的概念。 This answer提供了一個基本的方法,但需要額外的工作,並取決於某些基礎軟件。
  3. 以上#1和#2是否可以使用跨平臺方法完成,還是有必要針對每個平臺解決這個問題(例如,使用預處理器指令)?

以上主要是上下文。爲了解決這個問題,我想知道爲了在Linux上使用.NET Core運行Windows服務的相應步驟,需要採取哪些步驟。如果這可以跨平臺統一完成,甚至更好。

回答

4

我不認爲有這個跨平臺的解決方案。服務是特定平臺,AFAIK。

對於#2,如果您想在systemd下運行.NET Core,則無需任何代碼更改即可執行此操作。你基本上需要做的就是發佈你的應用程序,然後創建一個文件來描述你的守護進程。然後systemd將處理啓動,重新啓動和查殺您的應用程序。

這裏有一個systemd單元文件的例子來運行ASP.NET的核心應用程序作爲服務:https://docs.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 
相關問題