Monoを使用して.NETWindowsサービスをLinuxに移行するための最良のアプローチは何でしょうか?スケジュールされたコマンドとしてアプリケーションを実行することを避けようとしています。
サービス/システムデーモン(Linuxの場合)のような動作を取得することは可能ですか?
Linuxでは、 deamons は単純なバックグラウンドプロセスです。 Windowsのように、特別な制御メソッド(start()
、stop()
など)は使用されません。単純な(コンソール)アプリケーションとしてサービスを構築し、バックグラウンドで実行します。 daemonize
のようなツールを使用してプログラムをUnixデーモンとして実行し、アクティブ化するプログラムとしてmono
を指定することを忘れないでください。
他の人が指摘しているように、 mono-service は、ServiceProcess
アセンブリで構築されたサービスを実行するためのホストです。 Windows用に構築されたサービスは、このメソッドを使用して、Linuxで変更せずに実行できます。プロセスにシグナルを送信することでサービスを制御できます(マニュアルページを参照)。
モノサービスを使用してラップできますか?
この質問 を参照してください。
私が過去に行った方法は、.Netアプリケーションをコンソールアプリケーションとしてコンパイルしてから、Linuxサーバーでinitscriptsディレクトリに起動スクリプトを作成することです。
Linuxには明らかにWindowsサービスがなく、起動時にrc.dディレクトリから開始されるデーモンは同等です。ほとんどのrc.dスクリプトは、バックグラウンドスレッドでさまざまなアプリケーションを起動するだけなので、それほど複雑なことはありません。追加の作業のほんの少しは、開始するために、そしてサービスを停止したい場合は、Linuxシェルスクリプトを書く必要があるということです。