我有一个 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。
答案1
无论 ruby 在哪里,它都不$PATH
在cron
.ruby
通过运行查找实际位置type -a
。然后将其路径添加到$PATH
crontab 中的环境变量中。
例如,如果您发现type -a
显示的路径ruby
是/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
两者都应该有效。