【发布时间】:2023-04-02 00:02:02
【问题描述】:
我正在尝试使用 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
此时 upstart 将重新启动它。 我的问题可能与暴发户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 不正确。 我以一个不断重生的进程结束,我不能再杀了。
有什么建议吗?
【问题讨论】:
标签: ruby-on-rails-3 resque upstart