2011-12-07 4 views
1

私は最近、delayed_jobのラップを私のafter_restart段階に追加しました。同様に:私の絶え間ない殺人にもかかわらず、Delayed_Jobは死ぬことはない

system "script/delayed_job stop" 
system "script/delayed_job start -n 3" 

ほとんどの場合、機能します。私は今日、少し悩んでいました。私はdelayed_jobのインスタンスが、繰り返しと手動で行った後でもまだ実行中であることを発見しましたscript/delayed_job stop

私はまだこれを取得:

[email protected] /data/HQ_Channel2/current $ ps aux | grep del 
user 11034 0.0 3.4 74016 61964 ?  S Dec05 0:19 delayed_job.0      
user 11036 0.0 3.5 73660 63516 ?  S Dec05 0:21 delayed_job.1      
user 11038 0.0 3.6 73980 65256 ?  S Dec05 0:17 delayed_job.2 

script/delayed_job stopを経由して、これを閉鎖しようとしているように、私のことは不適切ですか?

私はこれを殺すために方法を知っている唯一の他の方法はkill -9であるが、この行き過ぎではないでしょうか?さらに、それをどのように動的に実装するのですか?

答えて

1

私も同様の問題がありました。

Engine Yard's delayed_job recipe、具体的にはits templateのstartコマンドとstopコマンドを確認してください。 Engine Yardインスタンスの/engineyard/bin/djにあるスクリプトを使用します。停止スクリプトが呼ばれ

<% (@num_workers || 1).times do |num| %> 
    check process <%= @worker_name %>_<%= num %> 
    with pidfile /var/run/engineyard/dj/<%= @app_name %>/dj_<%= @worker_name %>.pid 
    start program = "/engineyard/bin/dj <%= @app_name %> start <%= @framework_env %> <%= @worker_name %>" with timeout 60 seconds 
    stop program = "/engineyard/bin/dj <%= @app_name %> stop <%= @framework_env %> <%= @worker_name %>" with timeout 60 seconds 
    if totalmem is greater than 300 MB then restart # eating up memory? 
    group dj_<%= @app_name %> 
<% end %> 

、それはまず、kill -15(TERM)を使用し、それはまだ生きていた場合、デフォルトの60秒、そして、その後、kill -9を使用している猶予期間を待ちます。

後でメンテナンスを減らすことができる場合は、Engine Yardのスクリプト(とそのことについてはレシピ)を使用してください。しかし、それがあなたのために働かないなら、あなたはこれらの概念からあなたのスクリプトを外すことができます。私はRails 3にアップグレードする際にいくつかの問題を抱えていますので、うまく動作しないかもしれません。私はそれについてEngine Yardに連絡したばかりですが、これは彼らにとって最優先事項ではないと考えています。たぶんあなたもそれらに連絡する場合、それは変更されます。

関連する問題