0

rake時々失敗するこれらのタスクがあります。monitそれらを監視し、必要に応じて再起動するために使用したいと思います。

StackOverflow の他の ruby​​/monit スレッドを読みました。私の場合は、これらのプログラムが動作するために Rails 環境が必要であるという点で異なります。だからこそ、私はrake今それらをタスクとして持っています。

全体として、監視する必要があるタスクの 1 つを次に示します。

task(process_updates: :environment) do
  `echo "#{Process.pid}" > #{Rails.root}/log/process_alerts.pid`
  `echo "#{Process.ppid}" > #{Rails.root}/log/process_alerts.ppid`
  SynchronizationService::process_alerts
end

私の質問は、Rails 環境が機能する必要があるためrake、これをタスクとして残しますか? SynchronizationService::process_alertsまたは、呼び出して *.rb ファイルを実行する必要がある他のラッパーがありますか?

4

1 に答える 1

1

タスクを実行するときに pid を作成しているので、Monit は実行中の pid をチェックできます。次のような monit 構成を作成できます。

check process alerts with pidfile RAILSROOT/log/process_alerts.pid
  start program = "cd PATH_TO_APP; rake YOURTASK" with timeout 120 seconds
  alert your@mail.com on { nonexist, timeout }

もちろん、 RAILSROOTPATH_TO_APPYOURTASKは、パス/レーキ タスクに対応する必要があります。

次に、Monit は pidfile 値を使用してシステムで実行中のプロセスをチェックし、実行中のプロセスが見つからない場合はstart programコマンドを使用してプロセスを開始します。

于 2013-10-31T20:42:54.133 に答える