4

Linux上でrubyプログラムのデーモンを作りたいです。

また、デーモンをインタラクティブにしたい-ファイル/パイプ/最も簡単な方法でデーモンに入力を送信し、ファイルへの出力を受信できるようにしたい。

どうすればこれを行うことができますか?

モジュールのデーモン (http://daemons.rubyforge.org/)、スレッド、メソッド popen3 を調べましたが、上記のことを行うのに苦労しています。

答え: ムラデンの方法:

デーモンを作成するコントローラーがあります: (daemons モジュール gem が必要です)

require 'rubygems'
require 'daemons'

Daemons.run('/myDaemon.rb', {:app_name => "o", :dir_mode => :normal, :dir => '', :log_output => true, :multiple => true })

ここに myDaemon.rb があります:

puts `pwd`

File.open('my_pipe', 'r+') do |f|
    loop do
            line = f.gets
            puts "Got: #{line}"
    end
end

手順: 両方のファイルがルート ディレクトリ \. Daemons.run は \ にデーモンを作成します。

  1. 名前付きパイプ mkfifo ./my_pipe を作成します。

  2. ruby controller.rb スタート

  3. 猫 > my_pipe

  4. テキストを入力

  5. 入力を停止するには ctrl-c

  6. cat o.output 出力を確認する

4

2 に答える 2

4

http://www.pauldix.net/2009/07/using-named-pipes-in-ruby-for-interprocess-communication.htmlに基づいた、名前付きパイプのおそらく最も簡単な方法:

手順 1: 名前付きパイプを作成する

mkfifo ./my_pipe

ステップ 2: 「デーモン」を作成します。

File.open('my_pipe', 'r+') do |f|
  loop do
    line = f.gets
    puts "Got: #{line}"
  end
end

そしてそれを実行します。

ステップ 3: 別のターミナルを開いて実行する

cat > my_pipe

行ごとにテキストを入力し始めます。

ステップ 4: デーモンの出力を監視します。

ステップ 5: ???

ステップ 6: 利益。

于 2011-07-16T18:13:34.140 に答える
2

未使用のポートにバインドされたソケットを開きますが、それはあなたとそれと通信したいプログラムに知られています。デーモンが同じマシン上のプロセスと通信するだけでよい場合は、Unix ドメイン ソケットを使用します (「参考文献」を参照Socket.unix_server_loop)。実行中のホスト外のプロセスとも通信する必要がある場合は、インターネット ソケットを開きます (「参考文献」を参照Socket.tcp_server_loop)。

サーバーの一般的なレシピは次のとおりです。

  • ソケットを開く
  • ホストの IP アドレスと選択したポート (tcp) にバインドするか、システム上のパスにバインド (unix)
  • 何かが接続されるのを待つ (選択する)
  • 接続を受け入れる
  • 読み取り/書き込み通信ループに入る

クライアントで:

  • ソケットを開く
  • サーバーのアドレス/ポートに接続するか、サーバーが使用している Unix ドメイン ソケットのパスに接続します。
  • 接続したら、書き込み/読み取り通信ループに入ります。

サーバーとクライアントは、誰が最初に何を送信し、相手からの適切な応答が何であるかについて合意する必要があります。

于 2011-07-16T17:17:56.383 に答える