だから私は奇妙な状況に陥っています。私は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 の動作の違いは何ですか?
ありがとうジョエル