0

コマンドラインで(ユーザー "user"から)正常に実行されるRubyスクリプトを実行するcronジョブがありますが、ruby gem TMailが見つからないため、cronは失敗します。Nateの提案に従って、tmail gemを〜/ .gems /ディレクトリに手動でインストールしました。これは〜/.bashrcスクリプトによって示されます。

シェルから手動で呼び出された場合(デッドプールサーバー上)

./home/user/site.com/appdir/testbalances.sh

正常に動作しますが、CRONtab Webインターフェイス(同じコマンド)から、ログメールを受け取ります。

/usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:31:in gem_original_require': no such file to load -- tmail (LoadError) from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:31:inrequire'from afschriftmonitor / statement_monitor.rb:7

ファイルafschriftmonitor/statement_monitor.rb:7の6行目と7行目は

require'rubygems' require'tmail'

CRONが別のサーバーから実行されているようです、または〜/ .bashrcファイルを無視していますか?どうすればこれを修正できますか?スクリプトは私のMacでローカルに正常に実行され、Dreamhostのシェルアカウントからは正常に実行されるため、これはDreamhostホスティング固有の問題のようです。困惑しています。

4

2 に答える 2

1

自分で修正しました:それは2つの部分の問題である/だったことが判明しました:

  • Dreamhost は sh シェルから (他の CRON AFAIK と同様に) CRON を実行しますが、私のコンソール テストは Bash シェルからのものでした。
  • Glenn が指摘したように、CRON はコンソール シェルとは異なる環境設定をロードします。

これらを組み合わせて、次の方法で問題を解決できました。

  1. ~/.bashrc を ~/.shrc ファイルに複製 (chmod +x に設定)
  2. CRON から起動された bash スクリプトの先頭に次の行を追加します。

    . ~/.shrc

envスクリプト内にへの呼び出しを追加することで、適切な環境を簡単に確認できます。

于 2009-08-30T17:36:45.037 に答える
1

この種の問題は、シェル環境と cron の環境との間のミスマッチが常に原因です。さまざまな提案については、このページを参照してください:あなたの cron スクリプトは bash シェルで実行されますが、crontab で実行中は実行されませんか?

于 2009-08-30T15:12:47.170 に答える