2016-05-13 209 views
0

在本地服務器上(ubuntu)我已經安裝了程序foodsoft,它是用ruby編寫的。它也使用bundler,mysql。 foodsoft可以通過在命令cronjob不能正確執行腳本

RAILS_ENV=production bundle exec rails s -b 192.168.0.15 

我也有一個程序性sh腳本,開始foodsoft啓動,如果它不運行:

#!/bin/sh 
export DISPLAY=:0 
export LANG=de_DE.utf8 
ip_adr=$(/bin/hostname -I) 
if [ $(pidof ruby) ] 
then 
echo "online" 
else 
echo "offline" 
cd /home/jondal/foodsoft 
RAILS_ENV=production bundle exec rails s -b $ip_adr 
fi 

如果我在shell中運行腳本,所有工作正常。但是我的cronjob(列在crontab中)並沒有完全執行腳本。它產生以下txt文件:

離線 在/ usr/local/bin目錄/包:

offline 
bundler: command not found: rails 
Install missing gem executables with `bundle install` 

如果我與前綴ENV -i我碰到下面的shell啓動的sh腳本:23:在load': cannot load such file -- /usr/share/rubygems-integration/1.9.1/gems/bundler-1.3.5/bin/bundle (LoadError) from /usr/local/bin/bundle:23:in'

你有什麼想法我可以做什麼?

+0

您使用的是rvm嗎?您可能需要採取一些額外步驟,以使rvm與crontab配合使用。 –

+0

你的'cron'用戶在'/ home/jondal/foodsoft'目錄中有權限嗎?具體來說,執行權限是否正確,特別是在'bin /'中? –

回答

0

這很難說,但通過運行env -i可biaised你診斷,env -i將可能給你一個很好的$PATH,但目前的crontab $PATH的方式更簡約,報價man 5 crontab

PATH是設置爲「/ usr/bin:/ bin」。

所以,你可以將:

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin 

crontab的頂部,如man 5 crontab讓你在EXAMPLE部分,然後再試一次。但是,這並不能解釋bundle是如何在minimal/path中找到的,在/ usr/bin中是bundle

您是否使用crontab?如果是這樣,唯一改變的就是環境,如果PATH不夠用,我鼓勵你在你的crontab中加入env > /tmp/my.env來比較你的env和crontab env,你可能會看到一些有趣的東西。