ruby script à l'aide de rbenv dans cron
Je suis en train de lancer un script ruby à l'aide de rbenv avec cron.
Je sais que j'ai besoin de charger rbenv afin d'avoir la bonne version de ruby chargé.
J'ai essayé les options comme ceci :
*/10 * * * * /bin/bash -c "source" $HOME/.bashrc; lecteur de cd /data/app; ruby -v " >> /tmp/logfile.txt 2>,&1
mais tant que la session n'est pas interactif, je ne suis pas avoir la bonne version de ruby.
J'ai trouvé l'exemple comme ceci :
15 14 1 * * l'exportation BASH_ENV=/chemin/vers/environnement && /full/chemin/vers/bash -c '/full/chemin/vers/rvm_script.rb'
Il n'a pas de travail neighter. Ensuite, j'ai écrit un chargeur qui ne charge que les rbenv dans le shell courant, mais il ne fonctionne pas.
*/1 * * * * /bin/bash -c "$HOME/.rbenv/loader.sh ; lecteur de cd /data/app/; ruby -v " >> /tmp/logfile.txt 2>,&1
Maintenant, je suis à la recherche d'un autre moyen de le charger ... une idée ?
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé une solution pour charger rbenv. Soit avec un chargeur importation de rbenv le CHEMIN :
Le '.' avant '$HOME/.rbenv/loader.sh " est important, il exécute le script dans le shell courant
Ou sans chargeur, ce qui est mieux :
$PATH
changements:export PATH=$HOME/.rbenv/bin:$HOME/.rbenv/shims:$PATH
. Et vous n'avez même pas de cd, il suffit d'exécuterruby /data/app/script_name.rb
et rbenv trouverez la version correcte. Vous pouvez omettre les cales chemin si vous n'en avez pas besoin, comme vous le savez déjà.* * * * * * /bin/bash -c '. /etc/profile.d/rbenv.sh; ruby -v'
pour un système étendu de rbenv installations et des utilisateurs sans shell / home dirUne meilleure solution est d'utiliser simplement la commande
bash -lc
de commande. Cela permettra de lire votre bash fichier de profil, ce qui serait d'installation rbenv. À partir de labash
homme page:.bash_profile
, etc ne fait des trucs que seul un shell interactif besoins. Vous pourriez même vous causer des problèmes si vous avez un alias certaines commandes bash.* * * * * PATH=$PATH:/usr/local/bin && bash -lc "cd /home/deploy/apps/myapp && RACK_ENV=production bundle exec rake event:process
Même si kmmndr réponse est bonne, j'aime aussi le
bash -l
-approche.L'ouverture d'un non-interactive shell de login garde les choses simples et depuis mon application Rails et Ruby scripts s'exécutent tous sous le même utilisateur, les frais généraux n'est pas un problème.
Ainsi, au lieu de
Je ne
Comme indiqué dans la réponse ci-dessus,
bash -l
agira comme si vous vous connectez normalement, ce qui signifie que votre rbenv environnement sera mise en place (aussi longtemps que vous avez les lignes appropriées dans votre.bashrc
,.bash_profile
de/etc/profile.d/*
).Si vous avez besoin de plus de détails, j'ai écrit un post de blog sur ce sujet.
Pour mon script de sauvegarde en Ruby, j'ai simplement utiliser
~/.rbenv/bin/rbenv exec ruby [options] /path/to/ruby/script.rb
. Essayez ceci:De cette réponse de @Kelvin a fonctionné pour moi: