为什么#!/ usr / bin / env ruby​​在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中不起作用?

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

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

你可能在你的bashrc中添加了一个源* / rvm,它是正确的rvm加载脚本。

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

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

我有类似的问题。 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