web-dev-qa-db-ja.com

Crontab + Ruby on Rails:/ usr / bin / env:Ruby:そのようなファイルやディレクトリはありません

Ruby on Railsアプリがあり、rakeタスクのcrontabをスケジュールする必要があります。

*/5 * * * * Rails_ENV=production /usr/local/bin/rake -f /usr/local/www/mysite-web-production/current/Rakefile my_site:export_products >> /var/log/export_feed.log 3>&1

ただし、機能せず(手動で実行すると機能しますが、crontabとしては機能しません)、/usr/bin/env: Ruby: No such file or directoryが表示されます。 RVMを使用していません。 LinuxではRuby 1.9.3およびRails 3を使用しています。

3
bigpotato

Rubyがどこにあっても、それはcron$PATHにはありません。type -aを実行してRubyの実際の場所を見つけてください。 crontabの$PATH環境変数へのパスを追加します。

たとえば、type -aRubyへのパスが/usr/local/bin/Rubyであることを示している場合(そしてrakeへのパスから判断すると)、crontabは次のようになります。この:

PATH=$PATH:/usr/local/bin
*/5 * * * * Rails_ENV=production /usr/local/bin/rake -f /usr/local/www/mysite-web-production/current/Rakefile my_site:export_products >> /var/log/export_feed.log 3>&1

またはおそらく:

*/5 * * * * Rails_ENV=production PATH=$PATH:/usr/local/bin /usr/local/bin/rake -f /usr/local/www/mysite-web-production/current/Rakefile my_site:export_products >> /var/log/export_feed.log 3>&1

どちらも機能するはずです。

2
bahamat