从Dreamhost CRONjob调用Rubygem tmail

时间:2009-08-30 14:12:36

标签: ruby rubygems cron dreamhost

我有一个cron作业来运行一个Ruby脚本,它在命令行(来自用户“user”)上运行正常,但是cron失败了,因为它无法找到ruby gem TMail。我手动将tmail gem安装到我的〜/ .bms / dir,由我的〜/ .bashrc脚本指向,由Nate作为suggested

从shell手动调用时(在死区服务器上)

  

./家/用户/ site.com / APPDIR / testbalances.sh

工作正常,但是从CRONtab web界面(相同的命令),我得到一个日志邮件:

  

/usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:31:in gem_original_require': no such file to load -- tmail (LoadError) from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:31:in require'     来自afschriftmonitor / statement_monitor.rb:7

afschriftmonitor / statement_monitor.rb:7文件的第6行和第7行

  

要求'rubygems'   要求'tmail'

看来CRON是从另一台服务器运行的,还是忽略了〜/ .bashrc文件?我怎样才能解决这个问题?它似乎是一个托管特定问题的Dreamhost,因为该脚本在我的Mac上本地运行良好 - 如上所述 - 从我在Dreamhost上的shell帐户中运行良好。我很困惑。

2 个答案:

答案 0 :(得分:1)

这些问题总是在你的shell环境和cron的环境之间不匹配。有关各种建议,请参阅此页面:Does your cron script run in a bash shell, but not while running under crontab?

答案 1 :(得分:1)

我自己修正了:事实证明这是一个由两部分组成的问题:

  • Dreamhost从sh shell运行它的CRON(与任何其他CRON AFAIK一样),而我的控制台测试来自Bash shell。
  • CRON加载了与控制台shell不同的环境设置,正如Glenn指出的那样。

结合这些我设法解决问题:

  1. 将〜/ .bashrc复制到〜/ .shrc文件中,(设置为chmod + x)
  2. 将以下行添加到我的bash脚本的顶部,从CRON点燃:

    。 〜/ .shrc

  3. 通过在脚本中添加对env的调用来检查正确的环境很简单。