1

私のルビースクリプトでは、Gmailの宝石が必要でした:

require 'rubygems'
require 'gmail'

シェルで実行している場合は、問題なく動作します。

ruby my-script.rb

cronジョブに入れると、実行に失敗しました。

* * * * * cd /to/script/directory;/usr/local/rvm/rubies/ree-1.8.7-2011.03/bin/ruby ./my-script.rb

ログには、Gmailのgemを読み込めないことが示されています。

/usr/local/rvm/rubies/ree-1.8.7-2011.03/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require': no such file to load -- gmail (LoadError)

まあ、私がこれを行うとき(cmdをbash -l -c'CMD'に入れてください):

* * * * * /bin/bash -l -c 'cd /to/script/directory;/usr/local/rvm/rubies/ree-1.8.7-2011.03/bin/ruby ./my-script.rb'

再び問題なく動作します。

なぜ?

ps.argが-lbashをログインシェルにすることは知っていますが、それは何か違いがありますか?

4

3 に答える 3

6

この-lパラメーターは、ログインシェルでコマンドを実行します。これは、シェルプロファイルからパスやその他の設定を継承することを意味します。ログインシェルなしでcronジョブを実行すると、パス環境変数(RVMによって設定された変数など)が設定されていない状態で実行されるため、システムは参照されているgemを見つけることができません。

于 2012-09-10T08:35:39.127 に答える
3

rvmでは、シェルログインを使用する必要があります。FAQを参照してください

于 2012-09-10T08:34:26.213 に答える
2

ログインスクリプトにRVMをロードしていると思われますが、ergoRVMはログインシェルでのみ使用できます。

于 2012-09-10T08:33:31.327 に答える