2011-11-08 6 views
3

rakeタスクを実行しているcronジョブを設定しようとしています。私はいつでも宝石を使用しています。Cron running rake task "いずれかのソースでrake-0.8.7が見つかりませんでした"

* * * * * /bin/bash -l -c 'cd /home/jsmith/webapp/releases/20111104200246 && RAILS_ENV=production bundle exec rake test:pick_participant --silent' 

しかし、クロンは(メールで)報告このエラーを保持し、ジョブが実行されるたびに:ここでの設定は、crontabファイルをするたびにで正しく設定されているのconfig/schedule.rbに

every 1.minutes do 
    bundle exec rake "test:pick_participant" 
end 

です:

From: [email protected] (Cron Daemon) 
To: [email protected] 
Subject: Cron <[email protected]> /bin/bash -l -c 'cd /home/jsmith/webapp/releases/20111104200246 && RAILS_ENV=production bundle exec rake test:pick_participant --silent' 
Content-Type: text/plain; charset=ANSI_X3.4-1968 
X-Cron-Env: <[email protected]> 
X-Cron-Env: <SHELL=/bin/sh> 
X-Cron-Env: <HOME=/home/jsmith> 
X-Cron-Env: <PATH=/usr/bin:/bin> 
X-Cron-Env: <LOGNAME=jsmith> 
Message-Id: <[email protected]> 
Date: Mon, 7 Nov 2011 16:26:01 -0800 (PST) 
expr: syntax error 
Could not find rake-0.8.7 in any of the sources 

アプリケーション環境にバンドルされているレーキはバージョン0.8.7です。

クロンによって発行されたコマンドが正しいようだ:

/bin/bash -l -c 'cd /home/jsmith/webapp/releases/2067320376 && RAILS_ENV=production bundle exec rake test:pick_participant --silent' 

それが直接bundle exec rake代わりのrakeを呼んでいます。私は、アプリケーションディレクトリ内のコマンドラインで同じコマンドを発行する場合

はまた、rakeタスクが正常に実行された:

[email protected]:~/webapp/current$ /bin/bash -l -c 'cd /home/jsmith/webapp/releases/20111104200246 && RAILS_ENV=production bundle exec rake test:pick_participant --silent' 

* picked participant: Mindy! 

誰でもcronのは、このエラーに実行されている理由は上の任意のアイデアを持っている「を見つけることができませんでしたレーキ0.8.7?

答えて

7

私はこの問題を修正しました。

cronのエラー出力に報告されたように、2つの問題がありました:

expr: syntax error 
Could not find rake-0.8.7 in any of the sources 

これは、私はいくつかのGoogle検索とデバッグ後にそれらを固定する方法である:

  1. exp: syntax errorは私に固有のものですが、 Ubuntu 10.4 LTSインストール。ファイル/etc/profile.d/speechd-user-port.shで、それを修正するには、

    [ "$PS1" != "" ] && export SPEECHD_PORT=$(expr 6560 + $(getent passwd $USER | cut -f 3 -d :)) 
    

    変数展開する$ USERは、構文エラーが発生してライン

    export SPEECHD_PORT=$(expr 6560 + $(getent passwd $USER | cut -f 3 -d :)) 
    

    を交換してください。これは、Ubuntu 10.4の音声ディスパッチャパッケージのバグです。ここでは詳細な説明を参照してください:

    Ubuntu bug#790173 Cron doesn't send output properly Comment 6

    Ubuntu bug#601114 /etc/profile.d/speechd-user-port.sh references $USER

  2. 構文エラーが修正された後、私はCould not find rake-0.8.7 in any of the sourcesエラーを取得し続けました。

    これは、ログインセッションでRVMが読み込まれなかったためです。

    [[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" 
    

    RVM機能をソースこの行は、〜/ .bashrcの中だけだった、と〜/ .bash_profileの中ない

    ファイル〜/ .bashrcは、対話型の非ログインシェル用にロードされ、〜/。bash_profileがログインシェルのためにロードされています。これは、Cronのジョブコマンド "/ bin/bash -l"にある-lスイッチによってロードされたものです。

    これは私のせいでした。 RVM websiteは〜/ .bash_profileに行を置くことを明示しています。

    〜/ .bash_profileに行を追加すると、Cronジョブは正常にRVM環境を読み込みます。さて、私のCronレーキタスクはスムーズに動作します。ここで

私は問題のデバッグに学んだいくつかの事です:cronジョブの環境は、ログインシェルのコマンドラインから異なる

  • 。 Cron環境ははるかに裸であり、ログインシェルのように多くのパス/プロファイルがロードされません。そのため、コマンドラインではコマンドが機能しますが、Cronジョブでは機能しません。 Railsとレーキにルビーを切り出し

  • は、私がこのようなcrontabのエントリで、最も簡単なコマンドを実行しているクーロンのデバッグ:たびのconfig/schedule.rb

    every 1.minutes do 
        rake "--version" 
        command "rvm info" 
    end 
    

    * * * * * /bin/bash -l -c 'pwd’ 
    * * * * * /bin/bash -l -c 'echo $PATH’ 
    

    またはこれら

    これらの単純なコマンドは、「expr:構文エラー」がCronやRoRとは無関係の何かであり、RakeエラーがRVMが正しくロードされなかったためであることを認識させました。

  • .bashrc and .bash_profileの間に違いがあります。

    あなたはいつもちょうどCRONを使用してRVM環境を読み込むことができ、その後、あなたがそうのように、何でも熊手タスクを実行することができるはず
+0

crontabに '/ bin/bash -l -c'と書いてくれてありがとう。これはバンドラーの私の問題も解決しました。 – Roman

+0

すばらしい答え。あなたのソリューションを共有してくれてありがとう。 –

0

ree-1.8.7-2011.03をロードするgemsetの名前です

0 * * * * /home/user/.rvm/bin/rvm use ree-1.8.7-2011.03 rake name:task 

、タイプrvm listあなたの宝石を見る。あなたのcrontabで1ライナーの代わりにスクリプトファイルを使用すると、管理が容易になります。また、上記のコマンドをスクリプトファイルで使用することもできます。

関連する問題