2016-05-13 10 views
0

Auf einem lokalen Server (Ubuntu) habe ich das Programm Foodsoft installiert, das in Ruby geschrieben ist. Es verwendet Bundler, auch MySQL. foodsoft kann durch den BefehlCronjob führt Script nicht korrekt aus

RAILS_ENV=production bundle exec rails s -b 192.168.0.15 

Ich habe auch einen sh Skript programmiert gestartet werden, die foodsoft beginnt, wenn es nicht läuft:

#!/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 

Wenn ich das Skript in der Shell ausgeführt, die alle funktioniert gut. Aber mein Cronjob (in crontab aufgeführt) führt das Skript nicht vollständig aus. Es produziert die folgenden txt-Datei:

offline /usr/local/bin/Bundle:

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

Wenn ich das sh Skript in der Schale mit dem Präfix env -i bekomme ich folgende starten : 23: in 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 '

Haben Sie irgendwelche Ideen, was ich tun kann?

+0

Verwenden Sie rvm? Möglicherweise müssen Sie einige zusätzliche Schritte ausführen, damit Rvm mit Crontab gut spielt. –

+0

Hat Ihr 'cron'-Benutzer Berechtigungen im Verzeichnis'/home/jondal/foodsoft'? Insbesondere sind Ausführungsberechtigungen richtig, besonders in 'bin /'? –

Antwort

0

schwer zu sagen ist, aber Ihre Diagnose von env -i Lauf biaised werden können, env -i werden Sie wahrscheinlich einen schönen $PATH geben, aber die $PATH in der crontab sind viel mehr minimalistisch, zitiert man 5 crontab:

PATH Stellen Sie "/ usr/bin:/bin" ein.

So können Sie setzen:

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

an der Spitze Ihres crontab, wie man 5 crontab Sie im Abschnitt EXAMPLE gibt, und versuchen Sie es erneut. Aber das erklärt nicht, wie bundle mit einem minimalistischen Pfad gefunden wird, ist bundle in/usr/bin?

Verwenden Sie Ihre eigenen crontab? Wenn ja, ist die einzige Sache, die die Umgebung ändert, wenn PATH nicht genug ist, ich ermuntere Sie, Ihr env und das crontab env zu vergleichen, indem Sie env > /tmp/my.env in Ihr crontab setzen, können Sie etwas interessantes sehen.