2011-02-07 12 views
7

スタック:Crontabからのレイクタスク?

Apache2の

のRails 2.3.8

のRedHat Linuxの

ルビーエンタープライズ1.8.7

手に入れたに意味する私のアプリのユーザーのcrontabに以下のrakeタスク15分ごとにデータベーステーブルにレコードをプルします。

*/15 * * * * app_user cd /var/www/apps/my_app/current/ && rake thing:do_stuff RAILS_ENV=production 

cronデーモンがcronログでこのタスクを実行していますが、レコードをプルするデータベーステーブルは変更されません。このタスクは、/ var/www/apps/my_app/currentディレクトリに手動で実行し、期待どおりにレコードをテーブルにプルするときにエラーなく動作しています。

私はこのrakeタスクを実際に実行してもらうにはどうすればよい...は/ opt /ルビー企業とジャイブではないでしょう多分デフォルトのパスを考え、REEを使用して反映させるためのcrontabに

をPATH変数をリセットcronと?

+1

あなたもそのユーザーとして実行していますか? sudo su app_userを実行した後、cronジョブと同様にEXACTLYコマンドを実行します。もしそれがうまくいくなら、それはcronでうまくいくはずです。 –

答えて

8

rakeバイナリへのフルパスを使用してください(コンソールwhich rakeで実行し、rakeをフルパスに置き換えてください)。 which rake次のパスを返した場合例えば

、:

/Users/bob/.rvm/gems/ruby-1.9.3-p194/bin/rake 

をあなたはrakeタスクを実行するには、次のコマンドを使用する必要があります。

/Users/bob/.rvm/bin/rvm all do bundle exec rake allocator:snapshot 

を、私はルビーでのcronジョブのためにいつでも宝石を好みます

タスクがcronで失敗したかどうかを検出する方法は?失敗すると、cronは電子メールを送信しようとします。したがって、smtp設定を使用するようにpostfixを設定することができます(たとえば、googleから)。あなたのシステム内のそのcronジョブを実行しているユーザのホームディレクトリにあなたの電子メールのみを含む~/.forwardファイルを追加します。

10
0,15,30,45 * * * * /bin/bash -l -c 'cd /var/www/apps/my_app/current && RAILS_ENV=production bundle exec rake thing:do_stuff --silent' 
関連する問題