无法获得rails rake任务与crontab一起玩得很好

时间:2011-12-23 20:00:10

标签: ruby ruby-on-rails-3 rake crontab

我目前有这个shell脚本......

nightly.sh

#!/bin/bash
rvm 1.9.2
cd /home/appname/capistrano/current
RAILS_ENV=production bundle exec rake nightly >> /home/appname/capistrano/shared/log/nightly.log 2>&1

我在我的crontab条目中使用它... crontab -e

42 20 * * * /home/appname/nightly.sh

运行时我收到此错误

/home/appname/nightly.sh: line 4: bundle: command not found

我正在使用RVM

我现在已经根据@ KL-7

向我的crontab添加了一些环境变量
SHELL=/bin/bash
HOME=/home/appname
PATH=/home/appname/local/bin:/home/appname/.rvm/gems/ruby-1.9.2-p290/bin:/home/appname/.rvm/gems/ruby-1.9.2-p290@global/bin:/home/appname/.rvm/rubies/ruby-1.9.2-p290/bin:/home/appname/.rvm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

现在我得到了这个......

/home/appname/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/dependency.rb:247:in `to_specs': Could not find bundler
[minitest-1.6.0, rake-0.8.7, rdoc-2.5.8] (Gem::LoadError)
        from /home/appname/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/dependency.rb:256:in `to_spec'
        from /home/appname/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems.rb:1210:in `gem'
        from /home/appname/.rvm/gems/ruby-1.9.2-p290/bin/bundle:18:in `<main>'

4 个答案:

答案 0 :(得分:3)

可能是因为它抛出了一个错误,而你却没有抓住它。请尝试以下方法:

01 04 * * * /bin/bash -l -c 'cd /home/appname/capistrano/current && RAILS_ENV=production bundle exec rake nightly' >> /home/appname/capistrano/shared/log/nightly.log 2>&1

答案 1 :(得分:2)

似乎cron无法找到您的bundle可执行文件。您需要找到它(例如,使用which bundle),然后在crontab中指定它的完整路径,或者在crontab顶部设置PATH环境变量,如下所示:

PATH=/bin:/usr/bin:/path/to/directory/with/bundle/

答案 2 :(得分:2)

这可能会有所帮助: / bin / bash -l -c

读: http://blog.scoutapp.com/articles/2010/09/07/rvm-and-cron-in-production

答案 3 :(得分:-1)

这是另一种解决方案:

* * * * * ssh localhost 'your command here...'

这将只是ssh到同一主机(它来源正常环境)并发出命令