如何用monit监视delayed_job

Luk*_*ncl 74 ruby ruby-on-rails god monit delayed-job

网上有关于如何使用Monit监控delayed_job的例子吗?

我能找到的一切都使用了上帝,但我拒绝使用上帝,因为在Ruby中长期运行的过程通常很糟糕.(上帝邮件列表中最新的帖子?上帝内存使用量稳步增长.)

更新: delayed_job现在附带一个基于此问题的示例监听配置.

Luk*_*ncl 97

这是我如何工作的方式.

  1. 使用delayed_jobcollectiveidea fork除了主动维护之外,这个版本有一个很好的script/delayed_job守护进程,你可以使用monit.Railscasts有一个关于这个版本delayed_job(ASCIICasts版本)的好插曲.此脚本还具有一些其他不错的功能,例如运行多个工作程序的功能.我不在这里讨论.
  2. 安装monit.我从源码安装,因为Ubuntu的版本是如此荒谬的过时.我按照这些说明获取了Ubuntu软件包附带的标准init.d脚本.我还需要进行配置,./configure --sysconfdir=/etc/monit以便选择标准的Ubuntu配置目录.
  3. 写一个monit脚本.这是我想出的:

    check process delayed_job with pidfile /var/www/app/shared/pids/delayed_job.pid
    start program = "/var/www/app/current/script/delayed_job -e production start"
    stop program = "/var/www/app/current/script/delayed_job -e production stop"

    我将它存储在我的soucre控制系统中并include /var/www/app/current/config/monit/etc/monit/monitrc文件中指向monit .

  4. 配置monit.这些说明载有广告,但其他方式都可以.
  5. 为capistrano写一个任务来停止和开始.monit start delayed_job并且monit stop delayed_job是你想要运行的.我还在部署以获取任何配置文件更改时重新加载monit.

我遇到的问题:

  1. daemons必须安装gem才能script/delayed_job运行.
  2. 你必须通过环境将导轨script/delayed_job-e production(例如).这在README文件中记录,但不在脚本的帮助输出中记录.
  3. 我使用Ruby Enterprise Edition,所以我需要monit从Ruby的副本开始.由于sudo在Ubuntu中处理PATH的方式,我结束了symlinking /usr/bin/ruby/usr/bin/gemREE版本.

在调试monit时,我发现停止init.d版本并从命令行运行它有帮助,这样你就可以收到错误消息.否则很难弄清楚出现问题的原因.

sudo /etc/init.d/monit stop
sudo monit start delayed_job
Run Code Online (Sandbox Code Playgroud)

希望这有助于下一个想要监控delayed_jobmonit的人.

  • 注意`-e/ - environment选项已被弃用且无效.使用RAILS_ENV并查看http:// github.com/collectiveidea/delayed_job/issues /#issue/7` (10认同)

小智 8

对于它的价值,你总是可以使用/ usr/bin/env和monit来设置环境.这在当前版本的delayed_job,1.8.4中尤其重要,其中不推荐使用环境(-e)选项.

check process delayed_job with pidfile /var/app/shared/pids/delayed_job.pid
start program = "/usr/bin/env RAILS_ENV=production /var/app/current/script/delayed_job start"
stop  program = "/usr/bin/env RAILS_ENV=production /var/app/current/script/delayed_job stop"
Run Code Online (Sandbox Code Playgroud)

在某些情况下,您可能还需要使用env设置PATH.


小智 5

我发现为延迟作业创建初始化脚本更容易.可在此处访问:http://gist.github.com/408929 或以下:

#! /bin/sh
set_path="cd /home/rails/evatool_staging/current"

case "$1" in
  start)
        echo -n "Starting delayed_job: "
                su - rails -c "$set_path; RAILS_ENV=staging script/delayed_job start" >> /var/log/delayed_job.log 2>&1
        echo "done."
        ;;
  stop)
        echo -n "Stopping sphinx: "
                su - rails -c "$set_path; RAILS_ENV=staging script/delayed_job stop" >> /var/log/delayed_job.log 2>&1
        echo "done."
        ;;
      *)
            N=/etc/init.d/delayed_job_staging
            echo "Usage: $N {start|stop}" >&2
            exit 1
            ;;
    esac

    exit 0

然后确保monit设置为启动/重启应用程序,以便在monitrc文件中:

check process delayed_job with pidfile "/path_to_my_rails_app/shared/pids/delayed_job.pid"
start program = "/etc/init.d/delayed_job start"
stop program = "/etc/init.d/delayed_job stop"

这很棒!


Lau*_*nas 5

我找到了一个很好的方法来启动与cron启动delayed_job.我随时在控制cron.

我的日程表.rb:

# custom job type to control delayed_job
job_type :delayed_job, 'cd :path;RAILS_ENV=:environment script/delayed_job ":task"'

# delayed job start on boot
every :reboot do
  delayed_job "start"
end

注意:每当gem到0.5.0版本时我都会升级,以便能够使用job_type