我创建了一个我需要不断运行的程序。它目前生活在脚本/邮递员。我这样做是为了启动它:
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上运行它。
答案 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