0

resque スケジューラを使用しようとしていますが、プロセスを監視する良い方法が見つかりませんでした。私が望むのは、デプロイ後にスケジューラージョブを強制終了し、upstart再起動させることです。resque-scheduler を強制終了する capistrano スクリプトを作成しました

    task :stop_scheduler => :environment do
      pidfile = Rails.root + "tmp/pids/resque_scheduler.pid"
      if File.exists?(pidfile)
        pid = File.read(pidfile).to_i
        syscmd = "kill -s QUIT #{pid}"
        puts "Running syscmd: #{syscmd}"
        system(syscmd)
        FileUtils.rm_f(pidfile)
      else
        puts "****WARNING**** Scheduler pid file has not been found. Was scheduler running??"
     end
   end

この時点で、upstart はそれを再起動します。私の問題はおそらくupstart confにあります。次回の再起動時に PID を強制終了できるようにするには、Schduler が tmp/pids/resque_scheduler.pid に PID を書き込む必要があります。

これが私のupstart confの重要な部分です:

respawn
respawn limit 99 5
console none

script
su -c "source 'cd /myapp/; RAILS_ENV={env} bundle exec rake resque:scheduler BACKGROUND=yes    PIDFILE=./tmp/pids/resque_scheduler.pid >> ~/resque_workers.log 2>&1" my_user
end script

この種の conf を使用すると、スケジューラがもう一度フォークし、pidfile に書き込んだ pid が正しくないという効果があります。継続的にリスポーンし、もう殺すことができないプロセスで終了します。

なにか提案を?

4

2 に答える 2