2

この単純なデーモン (ruby daemonsstop gem を使用して記述) は、コマンド ライン オプションを使用してデーモンを停止するまで、0 から 9 までの数字を出力します。

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 個の数字すべてを確実に出力することはできますか?

4

1 に答える 1

3

stopを呼び出して自分で処理するときに送信される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
于 2012-09-04T15:51:15.063 に答える