O script de daemon rubi é executado apenas uma vez
-
25-09-2019 - |
Pergunta
Escrevi um script Ruby NFC Reader e o daemoniei com a jóia Daemons. Tudo funciona muito bem, exceto que o script só funciona uma vez ...
Daemon.rb
require 'rubygems'
require 'daemons'
pwd = File.dirname(File.expand_path(__FILE__))
file = pwd + '/touchatag.rb'
Daemons.run_proc(
'touchatag_project_daemon', # name of daemon
:dir_mode => :normal,
:dir => File.join(pwd, 'tmp/pids'), # directory where pid file will be stored
:backtrace => true,
:monitor => true,
:log_output => true
) do
exec "ruby #{file}"
end
touchatag.rb
quire 'rubygems'
require 'nfc'
require 'httparty'
class TagAssociator
include HTTParty
base_uri 'localhost:3000'
end
NFC.instance.find do |tag|
puts "Processing tag..."
TagAssociator.post('/answers/answer', :query => {:uid => tag.uid})
end
Isso funciona muito bem e estou recebendo a tag.uid no meu aplicativo. Mas quando eu examino outra etiqueta RFID, o script não será executado novamente ...
Alguém sabe como ajustar o script que ele executa "para sempre" e para quando o daemon é interrompido?
Obrigado
ATUALIZAR
Eu atualizei meu script Daemon.rb:
require 'rubygems'
require 'daemons'
options = {
:app_name => "touchatag_project_daemon",
:ARGV => ['start', '-f', '--', 'param_for_myscript'],
:dir_mode => :script,
:dir => 'tmp/pids',
:multiple => true,
:ontop => true,
# :mode => :exec,
:backtrace => true,
:monitor => true
}
Daemons.run(File.join(File.dirname(__FILE__), '/touchatag.rb'), options)
Mas apenas corre uma vez ... eu não entendo outras sugestões?
Solução
Você quase certamente quer usar Daemon.run
. run_proc
seria útil se você quisesse mover o código de touchtag.rb
em Daemon.rb
.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow