2012-04-14 33 views
1

在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工作嗎?也是日誌輸出應該是一個錯誤,它不是很遺憾地告訴我。

回答

1

OK現在解決了這個問題。問題在於我在/ usr/bin和/ usr/local/bin中都有一個Ruby。

我已經刪除了/ usr/bin中的ruby,並向crontab添加了正確的路徑變量(PATH =「/ usr/local/bin:/ usr/bin:/ bin」)。一切按預期工作。

1

您可能沒有正確設置環境。如果你在開發環境:

whenever --set environment=development 

將設置環境發展

+0

我爲什麼要這麼做?這涉及到生產服務器... – Berggeit 2012-04-14 08:04:05

+0

對不起,沒有在正確的環境是我想提出的一個常見的錯誤 – Steve 2012-04-14 08:47:04

+0

謝謝,沒有問題。我已經將Passenger版本添加到原始問題中,更清楚地表明它是我正在討論的生產環境。 – Berggeit 2012-04-14 09:10:22

0

對於未來的Google:我有這個確切的同樣的問題,雖然我的解決了非常不同......

我通過把set :output,'./cronOutput.txt'schedule.rb文件中記錄的輸出,並一直得到No JavaScript runtine found作爲輸出誤差。所以我去了並安裝了execjstherubyracer寶石。之後所有事情立即開始運作。

我的項目還在開發中,所以我不得不遵循Steve的建議(有點),並在我的schedule.rb中包括set :environment, "development"以便查詢我的表格。

希望這可以幫助別人!

相關問題