我正在尝试使用 resque 调度程序,但我找不到监控进程的好方法。我想要的是在任何部署后终止调度程序作业并upstart
重新启动它。我写了一个 capistrano 脚本来杀死 resque-scheduler
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
此时暴发户将重新启动它。我的问题可能与暴发户conf有关。我需要 Schduler 在 tmp/pids/resque_scheduler.pid 中写入 PID,以便能够在下次重新启动时将其杀死。
这是我的新贵 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
使用这种配置,我的效果是调度程序再次分叉,而我在 pidfile 上写的 pid 不正确。我以一个不断重生的过程结束,我不能再杀了。
有什么建议吗?