2016-05-13 105 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,你可能会看到一些有趣的东西。