#! / usr / bin / env ruby ​​wird in cron nicht gefunden

7

Ich habe ein einfaches Ruby-Skript, hello.rb :

%Vor%

Es läuft ok in der Befehlszeile:

%Vor%

Aber wenn ich es in cron :

setze %Vor%

In der Protokolldatei sind Fehler aufgetreten:

%Vor%

/usr/bin/env ruby läuft jedoch in der Befehlszeile einwandfrei:

%Vor%

Wie behebt man den env Fehler für cron ?

    
ohho 12.04.2013, 03:31
quelle

2 Antworten

16

Das Problem ist, dass die Umgebung nicht das ist, was Sie erwarten.

Sie sagen nicht, ob der Cron als Ihr Benutzer oder als root ausgeführt wird, aber in beiden Fällen können Sie testen, wie die Umgebung aussieht, indem Sie einen weiteren Cron-Eintrag hinzufügen:

%Vor%

Lassen Sie das einmal laufen, dann ziehen Sie es heraus und sehen Sie sich die Datei an.

Anstatt /usr/bin/env zu verwenden, um zu versuchen, einen Ruby zu finden, um den Code auszuführen, definieren Sie den Ruby explizit:

%Vor%

Sie können herausfinden, welchen Ruby Sie verwenden möchten:

%Vor%

Alternativ, anstatt auf /usr/bin/env in Ihrem #! Linie, definiere deinen Ruby dort.

Die Verwendung von /usr/bin/env ruby in Ihrem Code ist praktisch, wenn Sie etwas wie RVM oder rbenv verwenden und zwischen Ruby-Versionen wechseln. Es ist keine gute Wahl, wenn Sie etwas in "Produktion" einfügen, sei es auf Ihrem Computer in Ihrem eigenen Konto oder auf einem Produktions-Host, der als root ausgeführt wird.

Wenn Sie Linux oder Mac OS verwenden, versuchen Sie man 5 crontab für weitere Informationen. Auch " Wo kann ich Umgebungsvariablen festlegen, die crontab verwenden soll? verwenden? "sollte sehr nützlich sein.

    
the Tin Man 12.04.2013, 03:37
quelle
3

env sucht nur in der vorhandenen PATH-Variablen. crond erstellt den Prozess, der als Ihr Benutzername ausgeführt wird. Der PATH ist also minimal. Sie müssen Ihre Umgebungsvariablen im Skript selbst einrichten

    
jim mcnamara 12.04.2013 03:37
quelle

Tags und Links