为什么#!/ usr / bin / env ruby在crontab中不起作用?
我已经通过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中不起作用?
如果你通过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
- rvm安装 – / usr / local / rvm:权限被拒绝(在此之前,我在Ubuntu中错误地删除了主目录)
- CKEditor 4:未捕获的TypeError:无法读取null的属性’langEntries’