我正在尝试使用resque调度器,但找不到监控进程的好方法。我想要的是在任何部署之后终止调度器作业,并让upstart
重新启动它。我写了一个capistrano脚本来杀死resque调度器
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
此时,新贵将重新推出它。我的问题可能与暴发户冲突有关。我需要Schduler在tmp/pids/resque_scheduler.PID中编写PID,以便在下次重新启动时杀死它。
以下是我的新贵会议的重要部分:
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是不正确的。我以一个不断重生的过程结束,我不能再杀人了。
有什么建议吗?
这是旧的,但您签出了吗:http://upstart.ubuntu.com/cookbook/#expect
基本上,你需要告诉upstart分叉多少次——在你的情况下,我相信你会把expect fork
添加到你的upstart配置文件中,因为su-c会分叉一次(如果你的脚本分叉两次,你会使用expect daemon
)。
我遇到了同样的问题,我发现我必须删除BACKGROUND=yes标志。
我通过查看我的叉子数量来确定这一点,叉子数量超过了2,而且还在不断增长。看见http://upstart.ubuntu.com/cookbook/#how-以建立有关如何执行此操作的信息的分叉计数。
我删除了背景=是作为一个测试,它起了作用。我认为这是因为暴发户自动在后台启动任务,不仅没有必要指示它在后台运行,而且会导致暴发户感到困惑,不断产生新的进程。
一旦我删除了BACKGROUND=yes,上面提到的"如何建立fork-count"的结果是2,这意味着它是一个守护进程,因此您需要在您的新贵脚本中使用它:
预期守护程序