1

最近、after_restart フェーズにdelayed_job rap を追加しました。そのようです :

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

これはほとんどの場合機能します。今日、ちょっとした障害に遭遇するまで。繰り返し手動で実行した後でも、delayed_job のインスタンスがまだ実行されていることがわかりましたscript/delayed_job stop

私はまだこれを取得します:

user@ip-10-126-6-125 /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ではありませんか? さらに、それを動的に実装するにはどうすればよいでしょうか?

4

1 に答える 1

1

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

Engine Yard のdelayed_job レシピ、具体的には start コマンドと stop コマンドを含むテンプレートを確認してください。/engineyard/bin/djEngine Yard インスタンスでスクリプトを使用します。

<% (@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 に連絡したばかりですが、これが彼らにとって優先度が高いとは思えません。また、連絡をとれば変わるかもしれません。

于 2012-02-05T15:58:24.707 に答える