2011-03-09 30 views
8

我已经通过rvm(系统范围)安装ruby,并且通过正常的控制台正常工作,我的导轨程序在rails runnerapache2+passenger上运行正常。为什么#!/ usr/bin/env ruby​​在crontab中不起作用?

在一个crontab,我叫 rails runner foo.bar

现在,它放弃,仔细检查日志我看到:

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

任何人都知道在crontab中,为什么在/ usr/bin中/ env的不工作?

回答

7

如果通过RVM安装红宝石,红宝石可能不是在/ usr/bin中。根据安装RVM其中:

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

你可能添加源*/RVM到您的.bashrc这是正确的RVM加载脚本。

+0

我发现原因:ruby没有在crontab shell中注册。我做了如下:/ bin/bash -c“source/usr/local/rvm/src/rvm/scripts/rvm &&/root/a/a_rails/script/rails runner Foo.bar” – c2h2 2011-03-09 06:28:39

4

您的cron不会继承您的环境。尝试在文件中回显“$ PATH”以查看它的设置。

你也可以只是做 “PATH =的/ usr/bin中/红宝石& & foo.rb”

+1

原本是'/ usr/bin/ruby​​ foo.rb'吗?将'$ PATH'设置为文件名而不是目录列表不会很好。 – geekosaur 2011-03-09 05:13:20

+0

你需要PATH,GEM_PATH和所有其他东西... – c2h2 2011-03-09 06:29:09

0

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

我能找到使用以下命令的问题(第一个是怎么样的cron似乎运行命令):

苏-c“printenv PATH”用户X

带输出:在/ usr/local/bin目录:在/ usr/bin中:/ bin中:在/ usr /游戏

苏-l用户X -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/games

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

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

+0

你需要给所有ruby env,如果你使用rvm,你需要导出所有的GEM,GEM_HOME和PATH信息 – c2h2 2011-11-28 05:49:38

相关问题