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 

終わり

停止を指定しなかったため (方法がわからない)、神は a を送信してから、失敗した場合にプロセスを停止するためにSIGTERMaを送信します。SIGKILLこれは、デーモン化されていないプロセスを処理する方法ですか?

4

1 に答える 1

0

多少関係はありませんが、ループで EM::run() を使用することは想定されていません... EM は一度だけ開始され、リッスンする入力に反応するだけです...

同じトピックで、通常、EM プロセスを次の方法で保護することをお勧めします。

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

これにより、シャットダウンする前にすべての操作をきれいに完了することができます。

于 2011-07-04T07:35:20.187 に答える