52

Linux 用の Mono C# デーモンを作成しようとしています。

プロセスを強制終了するのではなく、処理が完了したときに開始と停止を行いたいと思います。

誰にもこれの例はありますか?

編集: debian で start-stop-daemon --background を使用する方法を理解したので、今のところそれを使用すると思います。

編集:私はこれを Java でも実装しています。アプリの終了をキャッチするこの素晴らしい addShutdownHook があります。モノサービスの依存関係を整理するのにもう少し時間を費やすか、アプリの終了をキャッチする方法を見つける必要があります。

SessionEnd イベントがありますが、これはサービスでのみ使用でき、コンソール アプリでは使用できません

回答: Linux で Windows サービスをラップするために mono-service を使用する

4

7 に答える 7

25

シグナルを使用する Unix の方法で通知を受信するには、受信する予定のシグナルごとにMono.Unix.UnixSignalを使用し、シグナルの配列で UnixSignal.WaitAny () を呼び出します。


通常、これは別のスレッドで行います。

于 2008-10-19T16:30:08.183 に答える
19

サービスを実装し、モノサービスを使用する必要があります。Google で検索すると、いくつかの例が見つかります。

于 2008-10-11T11:18:29.020 に答える
16

簡単な方法は、(ローカルの高い) ポートでリッスンし、bind のように管理クライアントからコマンドを受信することです。

より UNIX 的な方法は、 UnixSignalを使用してシグナル ハンドラーを登録し、特定のシグナルを受信したときに適切にシャットダウンすることです。Mono FAQ の「Mono でシグナル ハンドラを使用できますか?」を参照してください。警告と例について。

lupusはmono-serviceを発見しました。これは、ServiceProcessインターフェイスを使用したホスティング プロセスです。悲しいことMONO_DISABLE_SHMに、これには設定が必要です。これにより、Mono の一部の機能、特にクロスプロセス IPC システムが無効になります。

于 2008-10-09T14:28:14.953 に答える
4

Linux のデーモンは通常、kill シグナルなどのシグナルをリッスンしますが、ソフト リスタート (構成を読み戻す) などを実行できるデーモンもあります。

通常、これには、そのようなデーモンの開始と停止を制御する /etc/init.d ディレクトリ内のスクリプトが伴います。通常、pid ファイルは /var/run の下に作成され、スクリプトがプロセスをすばやく識別できるようにプロセス ID を保持します。

Mono 用にコーディングする場合でも、Mono プロセスとネイティブ プロセス (たとえば C で作成) またはスクリプトとの間に違いはないため、コーディング対象の環境を十分に理解する必要があります。

デイブ

于 2008-10-09T14:41:58.887 に答える
0

Davidは正解です。サービスの停止は、UNIXシグナルを介して実行されます。シグナルハンドラーを使用して、サービスをキャッチする必要があります。

于 2008-10-10T03:27:28.797 に答える
0

別の方法として、シェルスクリプトを使用します。モノラルアプリを起動し、アプリが(意図的または意図せずに)終了すると、アプリが設定したリターンシグナルを確認します。これを使用して、更新をコピーするか、再起動するか、終了するようにスクリプトに指示できます。アプリがクラッシュした場合、シグナルは返されないため、スクリプトはアプリを再起動し、コンソール出力の最後の数行を記載した電子メールを送信します。

MONOを使用したLINUXでのWindowsのようなサービス開発をご覧ください。

于 2010-06-20T12:24:15.780 に答える
0

Miguel de Icaza は最近、十分に簡単にデーモン化できる新しいMono C# インタラクティブ シェルについて書きました。Miguel は、他の C# アプリケーションに対話型シェルを組み込む方法を示すいくつかのソース コードを含むフォローアップ記事を持っています。これは、デーモンの出発点として役立つ場合があります。

インタラクティブ シェルには、まだリリースされていない Mono バージョン 2.2 が必要であることに注意してください。ただし、コードはMono の svn リポジトリで入手できます。

于 2008-10-10T02:59:13.453 に答える