1

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

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

4

2 回答 2

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,以便我更好地了解如果进程终止会发生什么。

于 2013-03-14T05:24:01.900 回答
2

使用此处建议的“守护进程”gem:
让 Ruby 程序成为守护进程?

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

于 2013-03-14T05:24:07.057 回答