2011-03-09 59 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

相關問題