ruby-on-rails – 如何编写一个强大的永无止境的进程?

我已经问了一个关于目录观看的另一个问题,这个问题得到了解答,但问题的另一半是如何在 ruby中最好地创建一个永无止境的进程来做到这一点.
以下是要求:

>永远奔跑
>可监视(即知道它是上升还是下降)
>有某种方式重新启动它并确保它已启动(上帝?)
>使用Capistrano开始/停止(会很好!)

我们看过BackgroundRb,但这看起来有点过时,说实话不可靠!
我们看过DelayedJob,但这似乎适合一次性工作(因为一项永无止境的工作似乎阻止任何其他工作完成,因为工作按顺序完成).

我们正在运行一堆构成我们环境的ubuntu服务器.

有任何想法吗?

解决方法

我有一个事件机器循环拖尾一些Nginx日志文件并将它们放入MongoDB. “log eater”脚本与ruby守护进程一起运行. http://daemons.rubyforge.org/

我发现它比上帝更可靠.如果脚本死亡,它还会监视并重新启动脚本.如果你想在跑步者死亡时收到通知,你可以使用monit来做到这一点.

这是守护进程的跑步者脚本:

#!/usr/bin/env ruby
require 'rubygems'
require 'bundler' 
Bundler.require(:default)
Bundler.setup(:default)

options = {
  :app_name   => "log_eater",:dir_mode   => :system,:multiple   => true,:backtrace  => true,:monitor    => true
}

Daemons.run(File.join(File.dirname(__FILE__),'log_eater.rb'),options)

这已经运行了好几个月没有泄漏或没有问题.上帝有泄漏和死亡的问题. Capistrano可以通过重新启动启动脚本来重新启动它.

这是我的gentoo linux的摘录

start() {
ebegin "Starting log-eater"
    cd /ruby/STABLE/quickanalytics
   `scripts/log_eater_runner.rb start -- /usr/logs/Nginx.log`
eend $? "Failed to start log-eater" 
}

– 启动命令后,您希望传递给脚本的任何args.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...