在本地服务器(ubuntu)上,我安装了foodoft程序,用ruby编写。它也使用bundler,mysql。 foodsoft可以通过命令启动
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文件:
offline
bundler: command not found: rails
Install missing gem executables with `bundle install`
如果我在shell中使用前缀env -i启动sh脚本,我会得到以下内容:
离线 / usr / local / bin / bundle: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 :(得分:0)
这很难说,但是通过运行env -i
进行诊断可能会被隔离,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
部分为您提供,然后重试。但这并不能解释如何使用简约PATH找到bundle
,/ usr / bin中是bundle
吗?
您使用自己的crontab
吗?如果是这样,唯一改变的是环境,如果PATH不够,我鼓励你通过在你的crontab中放一个env > /tmp/my.env
来比较你的env和crontab env,你可能会看到一些有趣的东西。