2011-07-04 7 views
1

私は神を使って監視しているクラスがあります。これは、構造体の次のとおりです。デーモン化されていないプロセスを神で終わらせる適切な方法は何ですか?

のlib/my_class.rb

#!/usr/bin/env ruby 

class MyClass 
    def start(config) 
    loop do 
     EventMachine::run do    
    end 
    end 
end 

begin 
    config = {"foo" => "bar"} 
    my_class = MyClass.new 
    my_class.start(config) 
rescue Exception => ex 
    puts "Exception in MyClass: #{ex.message} at #{ex.backtrace.join("\n")}" 
end 

そして、これは私が神とそれを実行している方法です:

のconfig/my_config.god

rails_root = File.dirname(File.dirname(__FILE__)) 
God.pid_file_directory = File.join(rails_root, 'tmp/pids/') 

# myclass 
God.watch do |w| 
    w.name = "myclass" 
    w.interval = 30.seconds 
    w.start = "#{rails_root}/script/rails runner #{rails_root}/lib/my_class.rb" 
    # w.stop = "do nothing?" 
    # w.restart = "#{w.stop} && #{w.start}" 
    w.start_grace = 10.seconds 
    w.restart_grace = 10.seconds 
    w.log = "#{rails_root}/log/my_class.log" 

    w.start_if do |start| 
    start.condition(:process_running) do |c| 
    c.interval = 5.seconds 
    c.running = false 
    end 
end 

end

私はストップを指定しなかったので(私にはわからない)、神はSIGTERMを送信し、その後SIGKILLを送信して失敗した場合、プロセスを停止します。これは私がデーモン化されていないプロセスを処理するはずですか?

+0

* "これはプログラミングフォーラムです。私たちはここで宗教的な議論を避ける傾向があります=) –

+0

haha​​、私はタイトルをつけて考えました。神はデーモン化し、プロセスを殺害したのですか?^_ ^ – David

答えて

0

やや無関係いますが、EMに::ループ内で実行()は想定されていません...オン

... EMは一度だけ起動され、そしてそれはちょうどそれがあまりにもリッスンどんな入力に反応し、同じトピックでは、通常、あなたがきれいにシャットダウンする前にすべての操作を終えていることを確認します

Signal.trap("INT") do 
    EM::stop() 
end 

であなたのEMプロセスを保護することをお勧めします。

関連する問題