ruby-on-rails - 为什么在 ubuntu 12.04 上完全跳过了 Ruby Daemons.run_proc block

标签 ruby-on-rails ruby ubuntu daemon ruby-daemons

我们正在尝试用 gem daemons 启动一个守护进程。在 ubuntu 12.04rails 3.2.12 ruote worker 的环境。这是 daemon.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() block 被完全跳过并且根本没有执行。我们试过 Daemons.run_proc()没有 'ruote_worker' 和 Daemons.call()并且 block 内的任何代码都没有被执行。不知何故,整个 block 被跳过并且永远不会被执行。有人可以阐明如何使守护程序工作吗?我们对 ruby​​ daemons gem 的经验有限(欢迎详细说明)。谢谢。

最佳答案

通读http://daemons.rubyforge.org/了解如何使用守护进程 gem。基本上,有两种不同的方式来创建一个守护进程:

  • 要么你有一个包含 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 中的脚本。

    关于ruby-on-rails - 为什么在 ubuntu 12.04 上完全跳过了 Ruby Daemons.run_proc block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19871662/

    相关文章:

    Mysql建表助手

    windows - linux 需要 'rubygems' 但 windows 不需要。为什么?我可以解决这个问题吗?

    android - 在 Ubuntu 上的 Netbeans 和 Eclips 中生成 R 文件时出错

    c++ - 如何在 KDevelop 中进入 Ubuntu 上的 OpenCV 功能?

    ruby-on-rails - 如何使用 Rails 或 Nginx 限制下载速度

    ruby-on-rails - Rspec 请求规范的空响应

    ruby - 在 define_method 定义的方法上调用 super

    ruby - 为什么Array的pop方法没有感叹号?

    linux - 终止 MySQLd session 以返回命令提示符

    ruby-on-rails - 如何将 split 与存储在变量中的正则表达式一起使用?