【问题标题】:Turn a ruby script into an always running job将 ruby​​ 脚本转换为始终运行的作业
【发布时间】:2013-03-14 05:15:19
【问题描述】:

我创建了一个需要不断运行的程序。它目前位于脚本/邮递员。我开始这样做:

sudo bundle exec rails runner script/mailman &

退出服务器后,它似乎停止了。这是我的邮递员程序的内容:

#!/usr/bin/env ruby
require "rubygems"
require "bundler/setup"
require "mailman"
require "rb-inotify"

Mailman.config.logger = Logger.new("/var/log/mailman.log")
Mailman.config.maildir = '/var/mail'
require File.dirname(__FILE__) + "/../../config/application"
Rails.application.require_environment!
Mailman::Application.run do
   default do
       begin
           Bin.receive_mail(message)
       end
   end
end

自动启动该程序并使其始终运行的好方法是什么?我在 Ubuntu 上运行它。

【问题讨论】:

  • 您找到可靠的答案了吗?我们在保持我们的邮递员服务器运行时也遇到了问题,我正在考虑将其绑定到 Resque。

标签: ruby-on-rails mailman


【解决方案1】:

按照此处的建议使用“守护进程”gem:
Make a Ruby program a daemon?

似乎在 RubyToolbox 上也很受欢迎
https://www.ruby-toolbox.com/categories/daemonizing

【讨论】:

    【解决方案2】:

    我发现daemons gem 很适合这个。

    假设您发布的代码位于script/mailman.rb,您可以创建一个文件script/mailman_ctl

    #!/usr/bin/env ruby
    require 'rubygems'
    require 'daemons'
    Daemons.run('mailman.rb')
    

    我通常将选项 {:backtrace => true, :monitor => true} 提供给 Daemons.run 调用,以便我更好地了解如果进程终止会发生什么。

    【讨论】:

    • 好的。我已经做到了并且做到了:sudo ruby script/mailman_ctl start 但我没有看到它使用 ps 运行,或者日志文件没有自行填充。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-08
    • 2018-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-09
    相关资源
    最近更新 更多