2

Ruby でバックグラウンド プロセスを開始するのに問題があります。

私は今このコードを持っています。

#!/usr/bin/env ruby -w
require "daemons"
require 'rubygems'

path = "#{File.expand_path(File.dirname(__FILE__))}/.."

Daemons.run_proc('stalker',{
  :dir_mode => :normal,
  :dir => "#{path}/tmp/pids",
  :backtrace => true,
  :monitor => false,
  :log_output => true
}) do
  system "stalk #{path}/config/jobs.rb"
end

次に、を使用してスクリプトを開始しますscript/stalker start

問題は、私がそれを止めることができないということです。間違った PID を pid ファイルに保存します。

このような:

script/stalker start
=> stalker: process with pid **39756** started.

ps aux | grep ruby 
=> linus    **39781**   0,3  1,9  2522752  78864   ??  S     8:39pm   0:10.11 ruby stalk script/../config/jobs.rb

最初の pid が を使用して出力されたものと一致しないのはなぜps aux | grep rubyですか?

とこれを使ってスクリプトを実行しようとしましexecた。%x{}system

4

1 に答える 1

3

を使用する場合はrun_proc、デーモン化するコードをブロックに入れる必要があります。で別のプロセスを開始しsystemても意味がありませんfork(プロセス(さらに別のpidを提供)しexecてからjobs.rbスクリプトを実行します。コードをブロックに移動するか、Daemons.runをjobs.rb使用run_procします

于 2011-04-11T19:28:09.300 に答える