rubyonrails3-resque调度器新贵



我正在尝试使用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,这意味着它是一个守护进程,因此您需要在您的新贵脚本中使用它:

预期守护程序

最新更新