Crontab läuft kein Ruby-Skript

7

Die crontab -l unten scheint nicht zu laufen. Das Skript läuft von Hand läuft gut. Hier ist der Fehler, den ich sehe

%Vor%

Und hier ist die Crontab:

%Vor%

Berechtigungen sind vollständig geöffnet, ihre ausführbare Datei, ich lege den env Pfad am Anfang der Datei, immer noch keine Würfel.

    
Gregg Horton 04.12.2013, 04:14
quelle

4 Antworten

10

Bearbeiten : Ich habe gerade bemerkt, dass der Nutzer seinen eigenen Post beantwortet hat, aber ich werde das hier lassen, falls jemand hier mit einem ähnlichen Problem stolpert. Ich habe herausgefunden, dass es für einige hilfreich ist.

Ich bin darauf gestoßen und habe festgestellt, dass dies die Lösung für Ruby-Skripte ist.

Ruby muss in einer bestimmten Umgebung ausgeführt werden. RVM behandelt dies, indem es eine Ruby-Umgebungsdatei für Ihre spezielle Version von Ruby bereitstellt, die alle erforderlichen Umgebungsvariablen festlegt. Wenn Sie beispielsweise ruby ​​1.9.3 patch 448 haben, können Sie sich die Quelldatei anschauen, die sich in der Quelldatei befindet:

%Vor%

(Hinweis: Meine Installation von rvm war unter /usr/local/.. , aber Ihre könnte anderswo sein. Verwenden Sie which ruby , um herauszufinden, wo Ihr Ruby installiert ist)

Hier können Sie sehen, dass es PATH und einige andere wichtige Umgebungsvariablen setzt. Wenn Sie rvm use ruby-1.9.3-p448 eingeben, bezieht rvm diese Datei tatsächlich im Hintergrund.

Cron-Ausführungen sind nicht-interaktive Sitzungen, dh sie haben keinen "Live" -Benutzer, der sich vor einer Sitzung angemeldet hat. Wenn Sie dies manuell tun und eine interaktive Sitzung ausführen, ist dies alles für Sie erledigt, aber für eine nicht interaktive Sitzung weiß sie nicht, was die Shell ist oder wo sie den Umgebungspfad finden kann. Vielleicht kann jemand mit mehr Wissen eine technische Erklärung liefern, warum.

Jedenfalls, um das zu umgehen, füge das oben auf deiner crontab hinzu:

%Vor%

Dies teilt dem nicht interaktiven Cron-Benutzer mit, welche Shell er verwenden soll, und teilt ihm dann mit, die .bashrc -Datei zu beziehen. Was ist in der Datei .bashrc ? Gute Frage, du solltest diese Zeile hinzufügen -

%Vor%

(Erneut durch deinen eigenen Ruby-Pfad ersetzen) Grundsätzlich beziehen Sie die Umgebungsdatei, die rvm für Sie bereitgestellt hätte, manuell. Es ist eine Möglichkeit, Cron dazu zu bringen, eine bestimmte Edelsteinumgebung oder Edelsteingruppe zu verwenden.

Es sollte mit diesen beiden Änderungen funktionieren.

    
user2490003 07.05.2014, 16:21
quelle
7

Ich habe es mit

funktioniert

* * * * * /bin/bash -l -c 'ruby my-ruby-file.rb'

    
hexinpeter 01.07.2015 09:13
quelle
2

Habe es gelöst, ich habe zwei Dateien in meinem Code aufgerufen und konnte diese Dateien nicht finden. Ich bearbeite die .rb-Datei, um den vollständigen Pfad einzuschließen, und es funktioniert jetzt einwandfrei. Danke an alle!

    
Gregg Horton 05.12.2013 04:47
quelle
1

Hast du es versucht:

%Vor%     
Maurício Linhares 04.12.2013 04:23
quelle

Tags und Links