在CentOS 5.6服務器上使用0.7.3,Rails 3.2.2,Ruby 1.9.3,Passenger 3.0.11(我沒有使用rvm)。問題是每當創建的cron作業都被清楚地執行,我可以在Cron日誌中看到它們,但是它們實際上並沒有執行Rails代碼。如果我複製cron代碼並將其粘貼到終端中,它按預期方式工作並執行。Rails3每當不從cron工作,但完全從終端
的代碼將被執行:
class SomeModel < ActiveRecord::Base
#Delete all items that haven't been updated for 2 hours or more
def self.cron_job
SomeModel.destroy_all(updated_at < ?", 2.hours.ago])
end
end
的schedule.rb:
set :output, "/var/log/cron"
every 1.day, :at => '4:45 am' do
runner "SomeModel.cron_job"
end
哪個生成以下的cron(輸出的crontab -1):
# Begin Whenever generated tasks for: site_name
45 4 * * * /bin/bash -l -c 'cd /home/user/domains/site_name && script/rails runner -e production '\''SomeModel.cron_job'\'' >> /var/log/cron 2>&1'
# End Whenever generated tasks for: site_name
如果我檢查第二天早上我發現這在cron日誌中:
Apr 14 04:45:01 node1 crond[9155]: (root) CMD (/bin/bash -l -c 'cd /home/user/domains/site_name && script/rails runner -e production '\''SomeModel.cron_job'\'' >> /var/log/cron 2>&1')
但是應該刪除的項目仍然在數據庫中。如果我複製代碼cron應該執行(/ bin/bash -l -c'cd ... 2> & 1'並從終端執行它,那麼這些項目將按預期方式移除。
此外,當我從終端手動執行代碼沒有錯誤,在cron的日誌I看到下列情況:
from script/rails:5:in 'require'
from script/rails:5
from script/rails:5:in 'require'
from script/rails:5
在時刻其中幾個Cron作業執行這個「(?)錯誤」在日誌中僅輸出一次。
執行cronjob中的某些內容或在終端中輸入代碼有什麼區別嗎?爲什麼會有區別,我該如何安裝它也可以從cronjob工作嗎?也是日誌輸出應該是一個錯誤,它不是很遺憾地告訴我。
我爲什麼要這麼做?這涉及到生產服務器... – Berggeit 2012-04-14 08:04:05
對不起,沒有在正確的環境是我想提出的一個常見的錯誤 – Steve 2012-04-14 08:47:04
謝謝,沒有問題。我已經將Passenger版本添加到原始問題中,更清楚地表明它是我正在討論的生產環境。 – Berggeit 2012-04-14 09:10:22