Ich versuche, eine Rake-Aufgabe mithilfe eines geplanten Cronjobs auszuführen. Meine Crontab sieht ungefähr so aus:
0 1 * * 1-7 /bin/bash -l -c "cd ~/jobs/rake && rake reports:create >> ~/jobs/logs/cron.log"
Ruby wird auf meinem Konto von RVM bereitgestellt und über Folgendes geladen ~/.bashrc
(vor der Prüfung auf Interaktionsfreiheit):
# load RVM env
[[ -s $HOME/.rvm/scripts/rvm ]] && source $HOME/.rvm/scripts/rvm
# If not running interactively, don't do anything
[ -z "$PS1" ] && return
# ... rest of logic
Die Ausführung dieser Aufgabe schlägt immer wieder fehl, da RVM beim Aufruf der Aufgabe nicht geladen ist ( /usr/bin/ruby
stattdessen wird das System verwendet) und Gem-Abhängigkeiten fehlen.
Wie kann ich Crontab dazu bringen, meine Shell-Umgebung zu laden, bevor meine geplanten Jobs ausgeführt werden? Danke.
Antwort1
Würde es nicht funktionieren, wenn Sie Ihre ~/.bashrc einfach im Cronjob als Quelle angeben würden?
0 1 * * 1-7 /bin/bash -l -c "source ~/.bashrc; cd ~/jobs/rake && rake reports:create >> ~/jobs/logs/cron.log"
Antwort2
Die Verwendung der Login-Shell wird in Hintergrundprozessen nicht empfohlen.
Sie können diese Methode verwenden:
0 1 * * 1-7 ~/.rvm/bin/rvm in ~/jobs/rake do rake reports:create >> ~/jobs/logs/cron.log"
außerdem gibt es rvm cron
den Befehl:
rvm help cron
Antwort3
Nach ein wenig Recherche im Anschluss an die Antwort von @mpapis scheint es auf der RVM-Website eine Seite zu geben, dieerläutert, wie eine bestimmte RVM-Installation in einem von cron ausgeführten Skript verwendet wird.
Grundsätzlich finden Sie heraus, welches RVM Sie verwenden möchten, indem Sie Folgendes ausführen (hier wird Ruby 1.9.3 verwendet):
$ rvm env --path -- 1.9.3-p125
Ersetzen Sie Ihre spezifische Ruby-Version. Dies verweist auf die Datei, die source
bearbeitet werden muss, damit Ihre gewünschte Ruby-Umgebung geladen wird.
Schreiben Sie das Skript, das von Ihrem Cron-Job ausgeführt werden soll:
meinjob.sh
#!/bin/bash
# the full path to the RVM env you got from running `rvm env ...`
source ~/.rvm/environments/ruby-1.9.3-p125
# do stuff ...
cd ~/jobs/rake
rake reports:create
Stellen Sie sicher, dass Sie die Datei ausführbar machen:
chmod u+x myjob.sh
crontab
0 1 * * 1-7 bash -c "cd ~/jobs && ./myjob.sh"