Ruby Daemon Soft Stop

Этот простой демон (написанный с использованием гема ruby daemons) печатает числа от 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 ответ

Решение

Вам нужно перехватить сигнал TERM, который посылается при вызове stop, и обработать его самостоятельно. Ваш код может быть примерно таким:

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
Другие вопросы по тегам