Ruby守护进程软停止

时间:2012-09-04 15:24:31

标签: ruby daemons

这个简单的守护进程(使用ruby daemons gem编写)打印从0到9的数字,直到我使用stop命令行选项停止守护进程:

require 'rubygems'
require 'daemons'

options = {
  :multiple   => false,
  :ontop      => false,
  :backtrace  => true,
  :log_output => true,
  :monitor    => false
}

Daemons.run_proc('test.rb', options) do
  loop do
    10.times do |i|
      puts "#{i}\n"
      sleep(1)
    end
  end
end

我用

启动守护进程
ruby simple_daemon.rb start

并用

停止
ruby simple_daemon.rb stop

是否有可能轻轻地停止守护进程,让它在杀死进程之前结束其最后一个循环,以便我确定它最后一次打印所有10个数字?

1 个答案:

答案 0 :(得分:3)

您需要捕获调用停止时发送的TERM信号并自行处理。你的代码可能是这样的:

Daemons.run_proc('test.rb', options) do
  stopped = false

  Signal.trap("TERM") do
    stopped = true
  end

  while not stopped
    10.times do |i|
      puts "#{i}\n"
      sleep(1)
    end
  end
end