在Ruby脚本中需要Ruby Gem会破坏Cron作业执行

时间:2013-12-19 02:48:44

标签: ruby rubygems cron rvm

我正在尝试使用Gems运行cron作业。我已经通过RVM安装了ruby,当我需要一个gem时它打破了cron的工作。我试过要求两个完全不同的宝石,PG / Pry,当我需要时,cronjob没有完成。这是“测试代码”,工作正常:

open('/home/log.log', 'a') do |f|
  f.puts Time.now.to_s
end

以下是我设置cronjob的方法:

* * * * * /usr/local/rvm/rubies/ruby-2.0.0-p247/bin/ruby /home/test1.rb

我每分钟都能看到新的输出。当我在顶部添加一个require gem行时,它会断开,但只有在通过cron运行时才会打开:

require 'pg'

open('/home/log.log', 'a') do |f|
  f.puts Time.now.to_s
end

cronjob运行(我可以看到它在sys日志中执行),但从未完成(没有输出进入文本文件)。我在两个独立的服务器上尝试过这个,一个是Debian,一个是CentOS,两者都有同样的问题。奇怪的是,这只会影响cron作业,如果我从控制台运行相同的ruby文件:/home/test1.rb它会正常工作。

任何帮助都会很棒。

1 个答案:

答案 0 :(得分:15)

您需要使用rvm设置crontab,例如:

rvm cron setup

使用rvm在crontab文件中设置环境变量

然后你有一个crontab文件在顶部:

PATH="/usr/local/rvm/gems/ruby-1.9.3-p194/bin:/usr/local/rvm/gems/ruby-1.9.3-p194@global/bin:/usr/local/rvm/rubies/ruby-1.9.3-p194/bin:/usr/local/rvm/bin:/usr/local/rvm/gems/ruby-1.9.3-p194/bin:/usr/local/rvm/gems/ruby-1.9.3-p194@global/bin:/usr/local/rvm/rubies/ruby-1.9.3-p194/bin:/usr/local/rvm/bin:/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/local/rvm/gems/ruby-1.9.3-p194@global/"
rvm_env_string='ruby-1.9.3-p194'
rvm_path='/usr/local/rvm'
rvm_ruby_string='ruby-1.9.3-p194'
RUBY_VERSION='ruby-1.9.3-p194'
GEM_HOME='/usr/local/rvm/gems/ruby-1.9.3-p194'
GEM_PATH='/usr/local/rvm/gems/ruby-1.9.3-p194:/usr/local/rvm/gems/ruby-1.9.3-p194@global'
MY_RUBY_HOME='/usr/local/rvm/rubies/ruby-1.9.3-p194'
IRBRC='/usr/local/rvm/rubies/ruby-1.9.3-p194/.irbrc'

然后你可以把你的crontask粘在它下面