9
votes

Besoin de configurer l'environnement RVM avant chaque travail de cron

J'ai installé et configuré RVM à peu près le modèle décrit dans la première partie de cet ensemble d'instructions: http://blog.ninjahideout.com/posts/a-guide-to-a-nginx-passenger-and-rvm-server

Fondamentalement, cela signifie qu'il n'y a pas de système de pré-construction Ruby (toutes les installations Ruby sont gérées par RVM) et RVM est installé à l'échelle du système au lieu d'un utilisateur particulier (fichiers au / usr / local / rvm ) de sorte que tous les utilisateurs du groupe rvm peuvent accéder aux mêmes rubis avec les mêmes gemmes installées.

Un problème avec la configuration du système de cette façon est que l'environnement RVM doit être mis en place dans une session Shell avant que Ruby ne puisse être utilisé. Pour tous les utilisateurs de RVM, je l'ai mis dans leur .bstrucc : source "/ usr / local / rvm / rvm" . Cela fonctionne bien pour les sessions SSH.

Le problème vient en jeu pour les travaux de cron, qui n'exécutent pas .bstrucc . Le script RVM ci-dessus (/ USR / local / RVM / RVM / RVM) est considérablement plus compliqué que la configuration de quelques variables d'environnement, de sorte que j'aimerais réellement exécuter cette commande avant chaque travail dans le fichier.

Bien sûr, je pourrais le faire manuellement, comme: xxx

mais je préférerais faire quelque chose comme ceci: xxx

Évidemment, la syntaxe ci-dessus ne fonctionne pas. Mais y a-t-il un moyen de faire fonctionner cela? Les pages cron man et la documentation n'étaient pas beaucoup d'aide ici. Mais y a-t-il un truc ou un moyen standard d'y parvenir?

Si cela importe, je cours Ubuntu 10.10 (Maverick Meerkat).


0 commentaires

4 Réponses :


4
votes

Fichiers Crontab ne permet généralement que deux types de choses (plus des commentaires et des lignes vierges si Vous voulez être pédants):

  1. Réglage de la variable d'environnement.
  2. Spécifications de la commande.

    et Certains crontabs ne supportent pas même Réglage des variables d'environnement (bien que je doute que vous rencontrez une telle pratique de pratique).

    Si vous devez faire plus que définir des variables d'environnement, vous devrez mettre votre Source "/ usr / local / rvm / scripts / rvm" soit dans les spécifications cron que vous avez dans votre question ou que vous aurez besoin d'envelopper vos travaux de cron dans un coureur de cron quelque chose comme ceci: < Pré> xxx

    et ensuite dans le crontab: xxx

    six d'une, une demi-douzaine de l'autre.


3 commentaires

Merci! Je soupçonné (inquiet) que ce serait la réponse, mais je suis heureux d'avoir une certaine confirmation que je ne manque pas de quelque chose dans les documents.


Ma version de SH (Bourne Shell) ne sait pas ce que "Source" est. Je devais changer le shebang en #! / Bin / bash .


@Labyrinthe afaik . "/ usr / local / rvm / scripts / rvm" devrait fonctionner dans un strict / bin / sh .



19
votes

Vous n'avez pas besoin d'écrire des emballages (à la suite de cette logique, vous pourriez aussi bien écrire une enveloppe à l'enveloppe). S'il vous plaît garder les choses simples. Tout ce que vous avez à faire est de configurer votre travail cron pour lancer une coque BASH et faire charger votre coquille Bash votre environnement.

La ligne Shebang de votre script ne doit pas se référer directement à un exécutable Ruby, mais à RVM's Ruby: P>

15 14 1 * * export BASH_ENV=/path/to/environment && /full/path/to/bash -c '/full/path/to/rvm_script.rb'


1 commentaires

Daniel - Vous voudrez peut-être modifier cette excellente réponse pour en faire plus d'une référence en notant où exactement les trucs de RVM sont introduits via le paramètre Bash_env. Dans mon cas, c'était de /etc/profile.d/rvm.sh (Centos 5). Chris



2
votes

Si votre cronjob est un fichier rubis droit, le docs dise que vous pouvez simplement utiliser le Dans Wrapper qui chargera la version Ruby correcte et Gemset: xxx

vous auriez toujours besoin d'ajouter cet appel à chaque ligne.


0 commentaires

25
votes

juste faire rvm cron setup

Ceci permettant la configuration RVM Ruby Cron Paramètres

alors crontab -e

Ajoutez vos tâches cron, sauvegarder et fermer et vous êtes prêt à partir !!


1 commentaires

Seule cette avance m'aide