2009-07-15 8 views
4

私はdelayed_jobを使用してジョブを実行しています。新しいジョブはcronジョブで毎分追加されています。rake job runningを維持する

現在rake jobs:作業タスクは、現在 'nohup rake jobs:work &'で手動で開始されており、ランダムに終了しています。

神はいくつかの人々の解決策であるように見えますが、余分なメモリオーバーヘッドはむしろ迷惑であり、私は展開スクリプト(Capistrano)によって再起動できる簡単なソリューションを望んでいます。

これを実現するためのbash/Rubyの魔法がい​​くつかありますか?それとも、私のサーバー上で監視サービスを実行して、あまり知られていないアカウントを使ってサイトを再起動することができますか?

答えて

0

delayed_job文書では、監視サービスを使用してレーキワーカージョブを管理することが推奨されています。私はrunitを使う - うまくいく。

(。あなたはそれがINITを置き換えるものではありませんモードでそれをインストールすることができます)

を追加しました:

日時:カピストラーノによって再起動:はい、値Runitはそれを可能にします。ただ、delayed_job労働者を殺すために、あなたのカピストラーノレシピで

delayed_job殺すSV

sudoを行います。 Runitは、新しくデプロイされたコードベースで再起動します。

0

デーモンの宝石はdelayed_jobで信頼できませんでした。あまり書かれていないスクリプト(collectiveideaのdelayed_job github pageにあるものを使用していた)で、デーモンのフォールトではないかもしれませんが、私は本当にわかりません。しかし、何らかの理由で、展開時に一貫性を失って再起動します。

これは、プロセスが実際に終了するのを待たずに、どこかで読み込まれたため、pidファイルが上書きされるなどです。しかし、私は本当に調査するのが面倒ではなかった。私はthese instructionsを使ってdaemons-spawn gemに切り替えました。そして、今はずっと信頼できるようです。

desc "Start a delayed_job worker in a endless loop to prevent exits." 
task :jobs => :environment do 
    while true 
    begin 
     Delayed::Worker.new(:min_priority => ENV['MIN_PRIORITY'], 
          :max_priority => ENV['MAX_PRIORITY'], 
          :quiet => false).start 
    rescue Exception => e 
     puts "Exception occured (#{e})" 
    end 
    puts "Task jobs:work exited, clearing queue and restarting" 
    sleep 1 
    Delayed::Job.delete_all 
    end 
end 

は、どうやらそれは動作しませんでした:

0

私は何度も繰り返しジョブのタスクを再起動する小さなrakeタスクを実装しています。だから私はこの単純な解決策で終了:

for ((;;)); do rake jobs:work --trace; done 
0

遅れた仕事を取り除くとwheneverまたはresque

のいずれかを使用します
関連する問題