我有一个 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
Run Code Online (Sandbox Code Playgroud)
但是,它不起作用(当我手动执行它时它可以工作,但不能作为 crontab)并且它向我显示/usr/bin/env: ruby: No such file or directory. 我没有使用RVM。我在 Linux 上使用 ruby 1.9.3 和 Rails 3。
无论 ruby 在哪里,它都不$PATH在cron. ruby通过运行查找实际位置type -a。然后将其路径添加到$PATHcrontab 中的环境变量中。
例如,如果您发现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
Run Code Online (Sandbox Code Playgroud)
或者可能:
*/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
Run Code Online (Sandbox Code Playgroud)
两者都应该有效。