cronjob没有正确执行脚本

时间:2016-05-13 19:04:59

标签: ruby sh

在本地服务器(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'

你有什么想法我能做什么?

1 个答案:

答案 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,你可能会看到一些有趣的东西。