1

ruby gem Daemons をインストールしました。動作していることを確認するために、5 秒ごとにファイルに出力するスクリプトを作成しました。次に、 http: //daemons.rubyforge.org/ にある readme で提供されている簡単な例を使用して、スクリプトを実行するための別のファイルを作成しました。rubygems とデーモンの両方が必要です。次に、「ruby mycontrol.rb start」と入力します。彼らが使用する例には、「(myserver.rb はバックグラウンドで実行されています)」というメッセージが表示されますが、それはわかりませんが、エラーは発生しません。「ps -u myusername」を実行すると、デーモン化されるファイルがプロセスにリストされていることがわかりますが、ファイルに何も書き込まれていないため、実行されているようには見えません。

ここに私の情報源があります:

# this is mycontrol.rb

require 'rubygems'
require 'daemons'

Daemons.run(daemon.rb)

と...

# this is daemon.rb

loop do 
 open('file.out', 'w') do |f|
  f.puts 'hello everybody'
 end
 sleep(3)
end

私がしていることは何か間違っているとあなたに飛びつきますか?

ありがとう、トニー

4

1 に答える 1

4

私はあなたの例を試してみましたが、うまくいきました(Daemonsバージョン1.0.10を搭載したLinux上のRuby 1.8.6)。ただし、次の問題が発生する可能性があります。

  • デーモン化されたプロセス ( daemon.rb) が の現在の作業ディレクトリで開始されていることがわかりました/。これは、実行時の現在mycontrol.rbのディレクトリでも、 を含むディレクトリでもありませんでしたdaemon.rb。root 以外のユーザーとして実行すると、プロセスにファイルを書き込む権限がありませんでした。ファイル名を に変更する/tmp/file.outと、期待される内容でファイルが作成されました。

  • file.out書き込み専用 ( 'w') モードで開いています。これは、3 秒ごとに切り捨てられて書き換えられることを意味します。ファイルを追加 ( 'a') モードで開くと、 hello everybody3 秒ごとに追加の行がファイルに書き込まれます。

「現在バックグラウンドで実行中です」というメッセージも表示されません。これは、出力を示すためではなく、何が起こるべきかを説明するためにドキュメントに含まれていると思います。

于 2009-11-18T22:32:50.850 に答える