为什么#!/ usr / bin / env ruby​​在crontab中不起作用?

时间:2011-03-09 05:03:17

标签: ruby ruby-on-rails-3 crontab

我已经通过rvm(系统范围)安装了ruby,并通过普通控制台正常工作,我的rails程序在rails runnerapache2+passenger都正常运行。

现在在crontab中,我打电话给rails runner foo.bar,它放弃了,仔细检查我看到的日志:

/usr/bin/env: ruby: No such file or directory

任何人都知道为什么/ usr / bin / env在crontab中不起作用?

3 个答案:

答案 0 :(得分:7)

如果你通过rvm安装了ruby,ruby可能不在/ usr / bin中。取决于安装rvm的位置:

bash -c "source /usr/local/lib/rvm" && rails runner foo.bar

您可能已将源 * / rvm添加到bashrc中,这是正确的rvm加载脚本。

答案 1 :(得分:4)

你的cron没有继承你的环境。尝试将“$ PATH”回显到文件以查看它的设置。

你也可以做“PATH = / usr / bin / ruby​​&& foo.rb”

答案 2 :(得分:0)

我有类似的问题。 Cron似乎默认运行命令而不使用您期望用户的PATH设置(以该用户身份登录时)。事实上,它似乎甚至没有使用任何默认的PATH设置(无论是在/ etc / profile或其他地方)。

我能够使用以下命令找到问题(第一个是cron如何运行命令):

  

su -c'printenv PATH'userX

输出:/ usr / local / bin:/ usr / bin:/ bin:/ usr / games

  

su -l userX -c'printenv PATH'

输出:/opt/ruby-enterprise-1.8.7-2010.02/bin/:/opt/ruby-enterprise-1.8.7-2010.02/bin/:/usr/local/bin:/usr/bin: / bin中:在/ usr /游戏

第一个命令似乎没有以任何方式填充PATH变量,除了裸系统默认值。 在我的例子中,我通过添加必要的(REE)路径来解决它:/etc/login.defs,默认情况下如下所示:

/etc/login.defs:103:ENV_PATH PATH = / usr / local / bin:/ usr / bin:/ bin:/ usr / games