2013-03-05 8 views
5

Mein Skript verwendet mysql, tiny_tds, fileutils und net/ftp. Running on Ruby 1.9.3. Es funktioniert einwandfrei, wenn ich es aus dem Ordner heraus starte.Führen Sie Ruby-Skript von Cron

Wenn ich es jedoch zu Cron Registerkarte hinzufügen, schlägt tiny_tds ständig fehl. Ich weiß nicht, ob alle anderen Edelsteine ​​nicht, wie ich diesen Fehler nicht übergeben bekommen können:

require': no such file to load -- tiny_tds (LoadError)

Ich versuchte es aus dem gleich Shell ausgeführt werden, die crontab verwenden würde, und ich bekomme diesen Fehler.

Das gesamte Skript ist nur 1 Datei.

Ich bin neu in Ruby, so dass mein Wissen in der Einrichtung der Umgebung den richtigen Weg begrenzt ist.

Im Kopf der Datei Ich habe

#!/usr/bin/ruby 
    require "mysql" 
    require "fileutils"; 
    require "tiny_tds" 
    require "net/ftp" 

Kurz gesagt, erhalte ich eine Liste von Jobs aus mysql, zu vergleichen, dass gegen MsSQL, FTP-Dateien immer wieder Update mysql, wenn Aufträge sind fertig.

Und ich muss dies von Cron ausführen.

Nach einem wenig Recherche, habe ich versucht, die Edelsteine ​​als global gesetzt zu setzen, aber ich denke, das kann nicht gearbeitet haben.

Vielen Dank im Voraus für jede Hilfe!

+0

haben Sie eine Lösung für t seine? –

Antwort

5

Dies liegt daran, dass die Umgebungsvariablen, die Sie in der Befehlszeile angegeben haben, nicht gesetzt sind, wenn crond Ihren Code ausführt. Die üblichen Verdächtigen sind PATH, LD_LIBRARY_PATH und Aliase, die bei der Anmeldung festgelegt werden.

können Sie sehen, was crond tut: crontab -e

* * * * * set > /tmp/setvals 

den obenstehenden Eintrag erstellen verwenden. lass es eine Weile laufen. Gehen Sie zurück in crontab -e und entfernen Sie diesen neuen Eintrag.

Vergleichen Sie, was in /tmp/setvals mit was Ihre Shell gibt, wenn Sie den Befehl set in der Befehlszeile eingeben. Sie können dann Maßnahmen ergreifen, um Dinge für die Umgebung Ihres Cron-Jobs zu ändern.

2

Es gibt mehrere Möglichkeiten für RVM mit cron zu kooperieren, wenn Sie Skript verwenden, dann ist die einfachste nur RVM zu verwenden - das System Rubin bedeutet nicht #!/usr/bin/ruby verwenden - nur in der ersten Zeile setzen #!/path/to/rvm/wrappers/ruby-1.9.3-p392/ruby

können Sie verwenden Aliase hartzucodieren einen rubin Pfad in einem Skript zu verhindern:

rvm alias create my_app 1.9.3 

und dann in Skript-Header (erste Zeile):

#!/path/to/rvm/wrappers/my_app/ruby