2016-03-29 10 views
1

Ich führe ein Docker-Bild (mit Cron bereits installiert) mit Schienen. Alles läuft gut, außer dass ich versuche, einen Cron-Job hinzuzufügen, der als Befehl funktioniert, mir aber beim Hinzufügen zu crontab einen Fehler gibt.Befehl funktioniert auf Bash aber nicht auf Cron

Der folgende Befehl ist:

0,2 * * * * /bin/bash -l -c 'cd /app && bin/rails runner -e production '\''Statistic.create_statistic'\'' >> log/cron_log.log 2>> log/cron_error_log.log' 

Ich habe es alle 2 Minuten laufen, die ich in diesem Code-Schnipsel aus Gründen der Übersichtlichkeit halber weggelassen.

Wenn ich nur laufen:

/bin/bash -l -c 'cd /app && bin/rails runner -e production '\''Statistic.create_statistic'\'' >> log/cron_log.log 2>> log/cron_error_log.log' 

Es funktioniert

Der Fehler, den ich bekommen ist:

/usr/local/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require': cannot load such file -- bundler/setup (LoadError) 
    from /usr/local/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in  `require' 
    from /app/config/boot.rb:3:in `<top (required)>' 
    from bin/rails:7:in `require_relative' 
    from bin/rails:7:in `<main>' 

Ich bin mit dem, wenn Juwel, das seinen Job zu tun scheint korrekt. Was mache ich falsch?

Antwort

2

Ich bin nicht vertraut genug mit Ruby, um eine richtige Antwort zu geben, aber es klingt wie es ist eine Art Umgebungsvariable in Ihrer Bash Shell Login gesetzt, die nicht während der Cron-Ausführung gesetzt wird.

Sie können Umgebungsvariablen über Ihre cronjob wie

PATH="/path/to/gems;$PATH" 
0,2 * * * * /bin/bash -l -c ' ..... ' 
gesetzt