2011-02-04 6 views
8

私はディレクトリウォッチについて別の質問をしましたが、それは答えましたが、問題の残りの半分は、これを行うためにルビーで決して終わりのないプロセスを作成する最良の方法です。ここ は要件は次のとおりです。永遠にロバストな終わりのないプロセスを書くには?

  • 実行
  • (それがアップまたはダウンしている場合、すなわち知っている)監視可能なこと、それがアップしていることを再起動して確保する方法のいくつかの並べ替えてい
  • (神?)
  • スタート/カピストラーノを使用して停止(いいだろう!)

我々はBackgroundRbを見てきましたが、それは少し時代遅れのようで、信頼性のない正直に言うと! DelayedJobを見てきましたが、これは1つの仕事に適しているようです(終わりのない仕事は、仕事が順番に行われるにつれて他の仕事が終了するのを妨げるようです)。

私たちは、私たちの環境を形成するUbuntuサーバをたくさん走らせています。

アイデア?

+0

あなたがサービスを書きたいような音 - これは、ルビーはおそらくMarm0t @ – Marm0t

+1

用に最適化されていないものです:あなたがそのアイデアを得るどこでしょ?チューリング完全言語でサービスを書くことができます。 –

+0

あなたの終わりのないプロセスは何をしていますか?それは最良の解決策であることに大きな違いを生むことができます。 –

答えて

3

私はいくつかの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" 
} 

のための鉱山からの抜粋です - startコマンドを使用すると、スクリプトに渡されたい任意の引数です後。

+0

マイケルに感謝します!私はこれを撃つつもりです。 – phil

0

あなたのケースでは、Resqueを使用します。それはあなたの要件を満たすようです。私はそれが労働者を制御するためのカピストラノのためのサンプルスクリプトを提供すると信じています。神と一緒に労働者を監視することはもう少し複雑ですが、ウェブコンソールが付属しているので、あなたの労働者が何をしているかを見ることができます。必要なものがあれば、スイートにもたくさんのプラグインがあります。

https://github.com/defunkt/resque