2017-05-16 4 views
5

私はTopshelfを使用してWindowsサービスを作成することに慣れています。 .NET Coreおよびクロスプラットフォームを行くことの見通しでは、これは興味深いシナリオの数提起:Topshelfはまだ.NETのコアをサポートしていないことを考えると.NET CoreコンソールアプリケーションからLinuxデーモンを作成するにはどうすればよいですか?

  1. を、どのように私は、.NETのコア用のWindowsサービスを作成することができますか? (1つのアプローチは、通常の.NETコアアプリケーションを作成してNSSMでインストールすることですが、開始/停止のフックを提供しないため、サービスを正常に停止する方法はありません)。
  2. Linuxでどのように同じことをしますか? Windowsサービスはありませんが、デーモンプロセスという概念があります。 This answerは基本的なアプローチを提供しますが、追加の作業が必要で、特定の基礎となるソフトウェアに依存します。
  3. 上記の#1と#2は、クロスプラットフォームのアプローチを使用して実行することができますか、このプラットフォームに対応する必要がありますか(プリプロセッサディレクティブなど)?

上記は主にコンテキストに過ぎません。この質問の目的のために、.NETコアを使用して、Linux上でWindowsサービスと同等のものを実行するために必要な手順を知りたいと思います。プラットフォーム間で統一された方法でこれを行うことができれば、さらに優れています。

答えて

4

私はこのためのクロスプラットフォームのソリューションはないと思います。サービスはプラットフォーム特有のもので、AFAIKです。

#2の場合、systemdの下で.NETコアを実行する場合は、コードを変更せずにこれを行うことができます。基本的にはアプリケーションを公開し、デーモンを記述するファイルsystemdunitを作成するだけです。 systemdは、アプリケーションの起動、再起動、および終了を処理します。

サービスとしてASP.NET Coreアプリケーションを実行するために、ここにsystemdユニットファイルの例があります: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 
関連する問題