【问题标题】:rvm monit delayed_jobrvm 监控延迟作业
【发布时间】:2011-09-11 23:41:59
【问题描述】:

我正在尝试使用monit 运行delayed_job,但它无法作为rvm 的路径运行(基于每个用户的本地rvm 安装)对命令不可用。我的应用程序是带有捆绑程序的 rails2 应用程序。 Monit 无法找到捆绑程序。有人对我如何知道 rvm 的监控路径有什么建议吗?

我收到了错误

[rails@x-rws1 current]$ monit start delayed_job -c config/delayed_job.monitrc 
'delayed_job' start: /usr/bin/env
'delayed_job' failed to start
no such file to load -- bundler
/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
/home/rails/public_html/myapp/current/config/../config/preinitializer.rb:3
/home/rails/public_html/myapp/current/config/boot.rb:28:in `load'
/home/rails/public_html/myapp/current/config/boot.rb:28:in `preinitialize'
/home/rails/public_html/myapp/current/config/boot.rb:10:in `boot!'
/home/rails/public_html/myapp/current/config/boot.rb:123
/home/rails/public_html/myapp/current/config/environment.rb:12:in `require'
/home/rails/public_html/myapp/current/config/environment.rb:12
/home/rails/public_html/myapp/current/script/delayed_job:3:in `require'
/home/rails/public_html/myapp/current/script/delayed_job:3

我的配置/delayed_job.monitrc

set daemon  120

check process delayed_job with pidfile /home/rails/public_html/myapp/shared/pids/delayed_job.pid
  start program = "/usr/bin/env RAILS_ENV=staging /home/rails/public_html/myapp/current/script/delayed_job start"
  stop program = "/usr/bin/env RAILS_ENV=staging /home/rails/public_html/myapp/current/script/delayed_job stop"

和脚本/delayed_job 可执行文件

#!/usr/bin/env ruby

require File.expand_path(File.join(File.dirname(__FILE__), '..', 'config', 'environment'))
require 'delayed/command'
Delayed::Command.new(ARGV).daemonize

【问题讨论】:

    标签: rvm delayed-job monit


    【解决方案1】:

    如果你已经有与其他服务正常工作的monit,并且只需要为rvm环境添加delayed_job守护进程,你可以尝试使用这个conf文件(它适用于我)

    /etc/monit/conf.d/delayed_job.conf(我有ubuntu服务器)

    check process delayed_job with pidfile /{project_folder}/tmp/pids/delayed_job.pid
    start program = "RAILS_ENV=production rvm -S /{project_folder}/script/delayed_job start"
    stop program = "RAILS_ENV=production rvm -S /{project_folder}/script/delayed_job stop"
    

    这里rvm -S命令让脚本在当前rvm ruby​​环境下运行

    你可以尝试用

    启动守护进程
    $ RAILS_ENV=production rvm -S /{project_folder}/script/delayed_job start
    

    命令以及守护进程是否会启动(通过将最后一个单词更改为“状态”来检查它)比使用延迟作业.conf 文件的机会大

    别忘了检查tmp/pids/文件夹中是否也创建了pid文件

    【讨论】:

      【解决方案2】:

      'rvm -S' 对我不起作用。

      http://matthew.mceachen.us/blog/howto-make-system-wide-rvm-installations-work-with-cron-monit-delayed_job-and-passenger-1021.html 上的说明做了。

      check process delayed_job.0
        with pidfile /u/apps/adgrok/shared/pids/delayed_job.0.pid
        start program = "/usr/local/bin/rvm-shell -c 'RAILS_ENV=production /u/apps/adgrok/current/script/delayed_job start -i 0'" as uid deploy and gid deploy
        stop program = "/usr/local/bin/rvm-shell -c 'RAILS_ENV=production /u/apps/adgrok/current/script/delayed_job stop -i 0'" as uid deploy and gid deploy
        if 2 restarts within 15 cycles then timeout
      

      还有一个值得注意的参考与 RVM 的作者关于 monit 的讨论线程:http://groups.google.com/group/rubyversionmanager/browse_thread/thread/d1a6c1f6396a8bf6/51afece4c8943912?#51afece4c8943912

      【讨论】:

      • 这对我有用!几个小时以来已经尝试了许多不同的解决方案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-29
      • 1970-01-01
      • 2012-07-02
      • 1970-01-01
      • 2011-12-14
      相关资源
      最近更新 更多