2011-12-23 31 views
2

我現在有這個shell腳本...無法獲取軌耙任務,發揮好與crontab中

nightly.sh

#!/bin/bash 
rvm 1.9.2 
cd /home/appname/capistrano/current 
RAILS_ENV=production bundle exec rake nightly >> /home/appname/capistrano/shared/log/nightly.log 2>&1 

我用它在我的crontab條目在這裏... crontab -e

42 20 * * * /home/appname/nightly.sh 

當它運行我得到這個錯誤

/home/appname/nightly.sh: line 4: bundle: command not found 

我使用RVM

我現在已經增加了一些環境變量,以我的crontab每@ KL-7

SHELL=/bin/bash 
HOME=/home/appname 
PATH=/home/appname/local/bin:/home/appname/.rvm/gems/ruby-1.9.2-p290/bin:/home/appname/.rvm/gems/[email protected]/bin:/home/appname/.rvm/rubies/ruby-1.9.2-p290/bin:/home/appname/.rvm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games 

現在我得到這個...

/home/appname/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/dependency.rb:247:in `to_specs': Could not find bundler 
[minitest-1.6.0, rake-0.8.7, rdoc-2.5.8] (Gem::LoadError) 
     from /home/appname/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/dependency.rb:256:in `to_spec' 
     from /home/appname/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems.rb:1210:in `gem' 
     from /home/appname/.rvm/gems/ruby-1.9.2-p290/bin/bundle:18:in `<main>' 
+0

您是否手動創建此crontab項目,或隨時隨地或不行嗎? – 2011-12-23 20:09:45

+0

@ KL-7手動創建它 – jondavidjohn 2011-12-23 20:16:41

+0

您使用的是rvm嗎? – 2011-12-23 20:30:10

回答

3

這可能是因爲它拋出一個錯誤,而你沒有捕獲它。請嘗試以下操作:

01 04 * * * /bin/bash -l -c 'cd /home/appname/capistrano/current && RAILS_ENV=production bundle exec rake nightly' >> /home/appname/capistrano/shared/log/nightly.log 2>&1 
+1

這會做什麼?對不起,請儘量不要複製/粘貼到不理解的術語中。 – jondavidjohn 2011-12-23 20:07:03

+0

'2>&1'將進程的stderr重定向到它的stdout。例如,參見[this](http://www.cyberciti.biz/faq/redirecting-stderr-to-stdout/)瞭解更多信息。 – 2011-12-23 20:09:00

+0

第一個重定向用於標準輸出;第二個是stderr。你捕捉stdout而不是stderr。 – bubbly 2011-12-23 20:09:25

2

好像cron找不到您bundle可執行文件。你需要找到它(使用,例如,which bundle),然後要麼指定其全路徑在crontab中或在crontab中的這樣的頂部設置PATH環境變量:

PATH=/bin:/usr/bin:/path/to/directory/with/bundle/ 
+0

更新的問題.... – jondavidjohn 2011-12-23 20:44:54

+0

好的,但'PATH' env變量沒有改變。嘗試使用'bundle'可執行文件添加路徑到目錄,或者至少在腳本中指定'bundle'的完整路徑。 – 2011-12-23 20:52:03

+0

按照您的建議重新更新。 – jondavidjohn 2011-12-23 21:13:29

-1

這裏是另一種解決方案:

* * * * * ssh localhost 'your command here...' 

這將只是ssh到同一個主機(它來源於正常的環境),併發出命令