我已经通过rvm(系统范围)安装了ruby,并通过普通控制台正常工作,我的rails程序在rails runner
和apache2+passenger
都正常运行。
现在在crontab中,我打电话给rails runner foo.bar
,它放弃了,仔细检查我看到的日志:
/usr/bin/env: ruby: No such file or directory
任何人都知道为什么/ usr / bin / env在crontab中不起作用?
答案 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