Почему блок Ruby Daemons.run_proc был полностью пропущен в Ubuntu 12.04
Мы пытаемся запустить демон с gem daemons
на ubuntu 12.04
а также rails 3.2.12
среда для рабочего. Вот этот демон.rb (gem version 1.1.9
):
#!/usr/bin/env ruby
require 'daemons'
require 'logger'
root = Dir.pwd
Dir.chdir(root)
file = Dir.pwd + '/ruote_worker.rb'
options = {
:dir_mode => :normal,
:dir => File.join(root, 'amine.log'),
:log_output => true,
:backtrace => true,
:multiple => false
}
logger = Logger.new('foo.log')
logger.info('----before daemon----')
Daemons.run_proc('ruote_worker', options) do
# Server loop:
loop {
puts '111111111111111'
logger.info('aaaaaaaaaaaaaaa')
}
end
Вот файл foo.log:
# Logfile created on 2013-11-10 12:56:12 -0600 by logger.rb/36483
I, [2013-11-10T12:56:12.594196 #26557] INFO -- : ----before daemon----
Вот ruote_worker.rb (для тестирования):
#!/usr/bin/env ruby
require 'logger'
logger = Logger.new('amine.log')
loop do
logger.info('---amine---')
puts '***************************************************** Amine ****************************'
sleep 5
end
Как показывает журнал, Daemons.run_proc()
блок был полностью пропущен и не выполнен вообще. Мы попытались Daemons.run_proc()
без 'ruote_worker' и Daemons.call()
и ни один код внутри блока не был выполнен. Каким-то образом весь блок был пропущен и никогда не выполняется. Может кто-нибудь пролить свет на то, как заставить демона работать? У нас ограниченный опыт работы с гемом ruby daemons (подробности приветствуются). Благодарю.
1 ответ
Прочитайте http://daemons.rubyforge.org/ чтобы получить хорошее представление о том, как использовать гем демонов. По сути, существует два разных способа создания демона:
- либо у вас есть сценарий управления, включая
Daemons.run_proc
вызов, в котором вы реализуете поведение демона - или у вас есть сценарий управления, включая
Daemons.run
вызов, которому вы передаете имя другого скрипта, который содержит реализацию демона
Судя по тому, что у вас уже есть, вы пытались перейти на второй вариант. Следующие работы для меня:
# this is daemon.rb
require 'daemons'
Daemons.run('ruote_worker.rb')
# this is ruote_worker.rb
require 'logger'
logger = Logger.new('amine.log')
loop do
logger.info('--- amine ---')
puts '*** amine ***'
sleep 5
end
Когда вы сейчас вызываете ruby daemon.rb run
(или же ruby daemon.rb start
) демон запускается и выполняется скрипт в ruote_worker.rb.