【问题标题】:resque scheduler upstartresque 调度程序新贵
【发布时间】: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


    【解决方案1】:

    这是旧的,但你检查过吗:http://upstart.ubuntu.com/cookbook/#expect

    基本上,您需要告诉 upstart 分叉多少次 - 在您的情况下,我相信您会将 expect fork 添加到您的 upstart 配置文件中,因为 su -c 将分叉一次(如果您的脚本,您将使用 expect daemon分叉两次)。

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题,我发现我必须删除背景=是标志。

      我通过查看我的分叉数确定了这一点,它超过了 2 个并且还在不断增长。有关如何执行此操作的信息,请参阅 http://upstart.ubuntu.com/cookbook/#how-to-establish-fork-count

      我删除了 Background=yes 作为测试并且它有效。我认为这是因为 upstart 会自动在后台启动任务,不仅不需要指示它在后台运行,而且还会导致 upstart 感到困惑并不断产生新进程。

      一旦我删除了 Background=yes,上面提到的“如何建立分叉计数”的结果是 2,这意味着它是一个守护进程,因此您需要在 upstart 脚本中使用它:

      期待守护进程

      【讨论】:

        猜你喜欢
        • 2011-07-23
        • 1970-01-01
        • 1970-01-01
        • 2011-04-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-28
        • 2018-04-11
        相关资源
        最近更新 更多