将ruby脚本转换为始终运行的作业

时间:2013-03-14 05:15:19

标签: ruby-on-rails mailman

我创建了一个我需要不断运行的程序。它目前生活在脚本/邮递员。我这样做是为了启动它:

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上运行它。

2 个答案:

答案 0 :(得分:2)

我发现daemons宝石适用于此。

假设您发布的代码位于script/mailman.rb,您可以制作文件script/mailman_ctl

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

我通常会向{:backtrace => true, :monitor => true}调用提供Daemons.run选项,这样我就可以更好地了解如果进程死了会发生什么。

答案 1 :(得分:2)

按照此处的建议使用'守护进程'宝石:
Make a Ruby program a daemon?

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