7

私はruby1.9.2p180(2011-02-18リビジョン30909)を使用しています

ロギングを行うために、ロギングジェムを使用します。私のプログラムには、デーモンとして使用される2つのブロックがあります。

ただし、これらのブロックからログを記録するとエラーが発生し、ログファイルには何も書き込まれません。

log shifting failed. closed stream
log writing failed. closed stream

コードで何が起こるかを次に示します。

log = Logger.new(logbase + 'logfile.log', 'monthly')
log.level = Logger::INFO

proc = Daemons.call(options) do
  # [...]
  log.info "Any Logmessage"
  # [...]
end

何かアイデア、そこに何が問題なのですか?

4

2 に答える 2

9

Daemonsgem は、プロセスをデーモン化するときにすべてのファイル記述子を閉じます。そのため、Daemons ブロックの前に開かれたログファイルは、フォークされたプロセス内で閉じられます。

また、閉じたファイル記述子に書き込むことができないため、-> エラーが発生します。

次の章を読むと、プロセスをデーモン化するとどうなるかについて詳しく読むことができます。

デーモンは私のデーモンに対して内部的に何をしますか?
http://daemons.rubyforge.org/Daemons.html

解決策は、デーモン ブロックの外側ではなく、デーモン ブロックの内側でログ ファイルを開くことです。それはそれを修正する必要があります。ただし、デーモン化すると作業ディレクトリが に変更されることに注意してください。その/ため、ログファイルのパスを参照するときはそれを考慮してください。

于 2013-02-11T08:36:26.310 に答える