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