gpt4 book ai didi

ruby-on-rails - 如何编写一个健壮的永无止境的流程?

转载 作者:数据小太阳 更新时间:2023-10-29 06:54:54 26 4
gpt4 key购买 nike

我问了一个关于目录监视的不同问题,有人回答了这个问题,但问题的另一半是如何最好地在 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"
}

-- 在开始命令之后是您想要传递给脚本的任何参数。

关于ruby-on-rails - 如何编写一个健壮的永无止境的流程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4901745/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com