Ich habe RVM ungefähr so installiert und konfiguriert, wie es im ersten Teil dieser Anleitung beschrieben ist: Ссылка
Grundsätzlich bedeutet dies, dass es kein pre-build system ruby gibt (alle Ruby-Installationen werden RVM-verwaltet) und RVM wird systemweit installiert und nicht an einen bestimmten Benutzer angehängt (Dateien bei /usr/local/rvm
), also alle Benutzer im rvm
group kann auf dieselben Rubine mit den gleichen installierten Edelsteinen zugreifen.
Ein Problem beim Einrichten des Systems besteht darin, dass die rvm-Umgebung in einer Shell-Sitzung eingerichtet werden muss, bevor ruby verwendet werden kann. Für alle rvm-Benutzer habe ich dies in ihre .bashrc : source "/usr/local/rvm/scripts/rvm"
eingefügt. Dies funktioniert gut für SSH-Sitzungen.
Das Problem tritt bei Cron-Jobs auf, die .bashrc nicht ausführen. Das obige rvm-Skript (/ usr / local / rvm / scripts / rvm) ist wesentlich komplizierter als das Einrichten einiger Umgebungsvariablen. Daher möchte ich diesen Befehl eigentlich vor jedem Job in der Datei ausführen.
Sicher, ich könnte das manuell machen, so:
%Vor%Aber ich würde lieber so etwas machen:
%Vor%Offensichtlich funktioniert die obige Syntax nicht. Aber, gibt es einen Weg, dies zum Laufen zu bringen? Die Cron-Man-Pages und die Dokumentation waren hier keine große Hilfe. Aber gibt es einen Trick oder einen Standardweg, um das zu erreichen?
Wenn es darauf ankommt, benutze ich Ubuntu 10.10 (Maverick Meerkat).
Sie müssen keine Wrapper schreiben (dieser Logik folgend könnten Sie auch einen Wrapper in den Wrapper schreiben). Bitte halten Sie die Dinge einfach. Alles, was Sie tun müssen, ist, Ihren Cron-Job so zu konfigurieren, dass er eine Bash-Shell startet und diese Bash-Shell Ihre Umgebung lädt.
Die Shebang-Zeile in Ihrem Skript sollte nicht direkt auf eine Ruby-Programmdatei verweisen, sondern auf rvm's Ruby:
%Vor%Dies weist das Skript an, die Umgebung zu laden und ruby wie in der Befehlszeile mit rvm loaded auszuführen.
Auf vielen von UNIX abgeleiteten Systemen können crontabs einen Konfigurationsabschnitt vor den eigentlichen Zeilen haben, die die auszuführenden Jobs definieren. Wenn dies der Fall ist, würden Sie Folgendes angeben:
%Vor%Dies stellt sicher, dass der Cron-Job von bash erzeugt wird. Dennoch fehlt Ihre Umgebung. Wenn Sie bash also anweisen möchten, Ihre Umgebung zu laden, sollten Sie dem Konfigurationsabschnitt Folgendes hinzufügen:
%Vor%HOME wird automatisch aus der Zeile / etc / passwd des Crontab-Besitzers abgeleitet, aber Sie können es überschreiben.
%Vor%Danach könnte ein Cron-Job so aussehen:
%Vor%Was ist, wenn Ihre Crontab den Konfigurationsabschnitt nicht unterstützt? Nun, Sie müssen alle Umweltrichtlinien in einer Zeile zusammen mit dem Job selbst angeben. Zum Beispiel
%Vor%Crontab-Dateien erlauben im Allgemeinen nur zwei Arten von Dingen (plus Kommentare und Leerzeilen, wenn Sie pedantisch sein wollen ):
Und einige Crontabs unterstützen nicht einmal die Einstellung von Umgebungsvariablen (obwohl ich bezweifle, Ich werde auf so etwas stoßen.)
Wenn Sie mehr als nur einige Umgebungsvariablen setzen müssen, müssen Sie Ihr source "/usr/local/rvm/scripts/rvm"
entweder in die Cron-Spezifikationen eingeben, wie Sie es in Ihrer Frage getan haben, oder Sie müssen Ihre Cron-Jobs in a einbinden cron Läufer so etwas:
Und dann in der Crontab:
%Vor%Sechs von eins, ein halbes Dutzend von den anderen.
Wenn Ihr Cronjob eine reine Ruby-Datei ist, sagen die Dokumente , dass Sie einfach den integrierten Wrapper verwenden können, der geladen wird up die richtige Ruby-Version und Edelstein:
%Vor%Sie müssten diesen Anruf jedoch zu jeder Zeile hinzufügen.