我的另一个 Q 已关闭,因为他们说这是这个问题的重复。
不幸的是,那个答案没有用。
基本上我试图让每当自动运行我的 refresh_sitemaps 。
在我的 cron.log 文件中有趣的是它看起来像这样(注意奇怪的字符):
/usr/bin/ruby: No such file or directory -- °¯Ø (LoadError)
/usr/bin/ruby: No such file or directory -- ؽô (LoadError)
/usr/bin/ruby: No such file or directory -- à=Ù (LoadError)
这是我的schedule.rb中的内容:
env :PATH, '/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin'
set :output, "#{path}/log/cron.log"
every 1.day, :at => '3:00 pm' do
rake "-s sitemap:refresh"
end
当我运行cap refresh_sitemaps
它时它运行良好,当它尝试作为 Cron 作业自行运行时它只是不起作用。
我很肯定从上面的 PATH 到 ruby 的路径是正确的。如果我 SSH 进入并运行以下命令,就会出现以下结果:
user@example.com [~]# /usr/local/bin/ruby -v
ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-linux]
奇怪的是它似乎甚至没有看到我的“路径”,因为它仍在 /usr/bin/ruby 中查找。
另一个奇怪的事情是那里实际上有一些东西......根据这个 ssh 命令:
user@example.com [~]# /usr/bin/ruby -v
ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-linux]
更新
当我运行crontab -l
这就是我得到的。请注意我添加的额外路径,它来自我为这个问题找到的 mediatemple 帮助指南(尽管它没有给出任何其他描述):
# Begin Whenever generated tasks for: APPNAME
PATH=/usr/local/bin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin
GEM_HOME=/usr/local/lib/ruby/gems/1.9.1
GEM_PATH=/usr/local/lib/ruby/gems/1.9.1
RUBYLIB=/usr/local/lib/ruby/site_ruby/1.9.1
10 17 * * * /bin/bash -l -c 'cd /home/USER/u/apps/APPNAME/releases/20120731204722 && RAILS_ENV=production bundle exec rake -s sitemap:refresh --silent >> /home/USER/u/apps/APPNAME/releases/20120731204722/log/cron.log 2>&1'
# End Whenever generated tasks for: APPNAME
我在 SSH 后尝试自行运行它,它运行良好:
/bin/bash -l -c 'cd /home/USER/u/apps/APPNAME/releases/20120731204722 && RAILS_ENV=production bundle exec rake -s sitemap:refresh --silent