32

cronでrbenvを使用してRubyスクリプトを実行しようとしています。正しいRubyバージョンをロードするには、rbenvをロードする必要があることを知っています。

私はこのようなオプションを試しました:

* / 10 * * * * / bin / bash -c'source $ HOME / .bashrc; cd / data / app; ruby -v'>> /tmp/logfile.txt 2>&1

しかし、セッションはインタラクティブではないため、適切なRubyバージョンがありません。私はこのような例を見つけました:

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

どちらも機能しませんでした。次に、現在のシェルにrbenvのみをロードするローダーを作成しましたが、機能しません。

* / 1 * * * * / bin / bash -c'$ HOME / .rbenv / loader.sh; cd / data / app /; ruby -v'>> /tmp/logfile.txt 2>&1

今、私はそれをロードする別の方法を探しています...何かアイデアはありますか?

4

5 に答える 5

46

rbenvをロードするための解決策を見つけました。ローダーがrbenvをPATHにインポートする場合:

* / 1 * * * * / bin / bash-c'。$ HOME / .rbenv / loader.sh; cd / data / app /; ルビー-v '

'。' '$ HOME / .rbenv / loader.sh'が重要になる前に、現在のシェルでスクリプトを実行します

またはローダーなしで、どちらが良いですか:

* / 1 * * * * / bin / bash -c'export PATH = "$ HOME / .rbenv / bin:$ PATH"; eval "$(rbenv init-)"; cd / data / app /; ルビー-v '

于 2011-12-09T10:30:33.273 に答える
18

より良い解決策は、単にコマンドbash -lcコマンドを使用することです。これにより、rbenvをセットアップするbashプロファイルファイルが読み取られます。bashマニュアルページから:

-lbashをログインシェルとして呼び出されたかのように動作させます

bashが対話型ログインシェルとして、または--loginオプションを指定した非対話型シェルとして呼び出されると、最初にファイル/ etc / profile(ファイルが存在する場合)からコマンドを読み取って実行します。そのファイルを読み取った後、〜/ .bash_profile、〜/ .bash_login、〜/ .profileの順に検索し、最初に存在して読み取り可能なコマンドからコマンドを読み取って実行します。--noprofileオプションは、シェルの起動時にこの動作を禁止するために使用できます。

于 2012-04-18T21:06:33.677 に答える
3

kmmndrの答えは正しいですが、私もbash -l-approachが好きです。

非対話型のログインシェルを開くと、作業が簡単になります。また、RailsアプリケーションとRubyスクリプトはすべて同じユーザーで実行されるため、オーバーヘッドは問題になりません。

だから代わりに

*/1 * * * * /bin/bash -c 'export PATH="$HOME/.rbenv/bin:$PATH" ; eval "$(rbenv init -)"; cd /data/app/; ruby -v'

そうです

*/1 * * * * /bin/bash -lc 'cd /data/app/; ruby -v'

上記の回答で述べたように、bash -lは通常のログインのように動作します。つまり、rbenv環境はすでにセットアップされています(の、に適切な行がある.bashrc場合.bash_profile/etc/profile.d/*

詳細が必要な場合は、このトピックに関するブログ投稿を作成しました。

于 2014-08-25T21:28:15.810 に答える
2

Rubyのバックアップスクリプトには、単にを使用します~/.rbenv/bin/rbenv exec ruby [options] /path/to/ruby/script.rb。これを試して:

* * * * * ~/.rbenv/bin/rbenv exec ruby -v > ~/rbenv-ruby-version.txt
于 2016-06-23T19:32:40.290 に答える
2

@Kelvinからのこの回答は私のために働いた:

*/1 * * * * PATH=$HOME/.rbenv/bin:$HOME/.rbenv/shims:$PATH ruby -v >> ~/test.out
于 2017-01-27T21:48:23.040 に答える