【发布时间】:2014-01-07 11:36:21
【问题描述】:
我正在尝试使用 Gems 运行 cron 作业。我已经通过 RVM 安装了 ruby,当我需要 gem 时,它会破坏 cron 工作。我试过需要两个完全不同的 gem,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 它将正常工作。
任何帮助都会很棒。
【问题讨论】:
-
您有
RUBYLIB环境变量问题吗?运行 cron 作业时的各种搜索路径很少与交互式 shell 中使用的搜索路径相匹配。 -
我认为我的任何配置中都没有设置 RUBYLIB 环境变量。我做了以下检查。 ruby -e "puts $:" 在 IRB 中,然后我创建了一个 ruby 脚本,它将输出保存到一个文件并通过 cron 作业运行它。两者的输出完全相同。这意味着 Rubylib 环境变量应该不是问题,对吧?
-
@muistooshort - 如果我需要“pry”而不是“pg”,我检查了它是否会损坏,果然如此。因此,我将稍微修改一下问题以反映这一点。
-
所以不管你
require是什么,它都会中断?这闻起来像是某种路径问题。当您在普通的 shell 中运行时,看起来您正在通过 RVM,因此它可能正在为您设置环境。 -
非常感谢您的帮助。我会在早上尝试这第一件事(这里是凌晨 5 点)。