4

だから私は奇妙な状況に陥っています。私はdelayed_job 2.0.7とdaemons 1.0.10とruby 1.87とrails 2.3.5をScientific Linuxリリース6.3(Carbon)で実行しています。

遅延したジョブを毎晩再起動し、一連のバッチ処理を実行する rake タスクがあります。以前は ruby​​ script/delayed_job を停止してから開始するだけでした。名前付きキューを実行できる名前付きキューのバックポートを追加しました。このため、名前付きキューの各タイプのいくつかのプロセスを開始したいと考えています。これを行うには、 -i を使用して各プロセスに異なる名前を付けて、衝突しないようにするのが最善の方法のようです。

このループを実行するためのいくつかの Ruby コードを書きましたが、これは開発環境でうまく機能し、コマンド ラインでもうまく機能し、Rails コンソールから呼び出されたときにもうまく機能します。しかし、cron から呼び出されると、サイレントに失敗し、呼び出しは false を返しますが、エラー メッセージは返されません。

# this works
system_call_result1 = %x{ruby script/delayed_job stop}
SnapUtils.log_to_both "result of stop all - #{system_call_result1} ***"

# this works
system_call_result2 = %x{mv log/delayed_job.log log/delayed_job.log.#{Date.today.to_s}}
SnapUtils.log_to_both "dj log file has been rotated"

# this fails, result is empty string, if I use system I get false returned
for x in 1..DELAYED_JOB_MAX_THREAD_COUNT
  system_call_result = %x{ruby script/delayed_job -i default-#{x} start}
  SnapUtils.log_to_both "result of start default queue iteration #{x} - #{system_call_result} ***"
end

# this fails the same way
for y in 1..FOLLOWERS_DELAYED_JOB_MAX_THREAD_COUNT
  system_call_result = %x{ruby script/delayed_job --queue=follower_ids -i follower_ids-#{y} start}
  SnapUtils.log_to_both "result of start followers queue iteration #{y} - #{system_call_result} ***"
end

そのため、多くの試行を行ったところ、この問題は -i - 名前付きプロセスを使用した場合にのみ発生し、プロセスを停止してから開始しようとした場合にのみ発生することがわかりました。ストップを削除すると、すべて正常に動作します。

繰り返しますが、これは cron を使用する場合のみです。

コマンドラインまたはコンソールを使用して実行すると、正常に動作します。

だから私の質問は、以前に同じ ruby​​ プロセスでそれらを停止した場合、これらの名前付き dj プロセスが開始されない原因となる cron の動作の違いは何ですか?

ありがとうジョエル

4

1 に答える 1

2

わかりました、ついにこれを理解しました.cronが電子メールを送信するかどうかを確認したところ、sendmailが壊れていることがわかりました。理由を正確に説明できる人には、まだ賞金を提供します..

于 2013-04-25T20:28:59.893 に答える