0

我有一个 cron 作业来运行 Ruby 脚本,该脚本在命令行上运行良好(来自用户“user”),但 cron 失败,因为它找不到 ruby​​ gem TMail。我手动将 tmail gem 安装到我的 ~/.gems/ 目录中,由我的 ~/.bashrc 脚本指向,正如Nate所建议的那样。

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

./home/user/site.com/appdir/testbalances.sh

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

/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:inrequire' 来自 afschriftmonitor/statement_monitor.rb:7

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

需要'rubygems' 需要'tmail'

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

4

2 回答 2

1

这类问题总是你的 shell 环境和 cron 的环境不匹配。请参阅此页面以获取各种建议:您的 cron 脚本是否在 bash shell 中运行,但不是在 crontab 下运行时?

于 2009-08-30T15:12:47.170 回答
1

自己修好了:原来它是/曾经是一个两部分的问题:

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

结合这些,我设法通过以下方式解决了这个问题:

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

    . ~/.shrc

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

于 2009-08-30T17:36:45.037 回答