簡體   English   中英

- Rails & cron & 每當/幾分鍾的延遲,當服務器負載很重時

[英]- Rails & cron & whenever / a few minutes delay when the server is heavily loaded

我使用一個名為“無論何時”的 gem 來管理我的 cron 作業。 在 cronfile 中,我有每 1 分鍾調用一次任務 XXXX 的 cron 作業。 我的 config/schedule.rb 是這樣的:

every '* * * * *' do
  rake "XXXXXXXX"
end

此 cron 作業運行良好,稍有延遲。 任務 XXXX 在進程創建幾秒鍾后開始運行它的第一行。 由於此任務在不到 1 分鍾的時間內完成,因此我永遠不應該同時擁有多個進程。

但是,服務器負載很重,這種延遲會變成幾分鍾。
這導致許多未完成的進程保留在我的進程列表中,因為 cron 作業每分鍾創建一個進程。

這將導致服務器變得更重,如果最壞的情況發生,服務器就會完全死機。

為什么會這樣? 如何防止 cronjob 延遲調用任務?

您可以添加一個dependent task來檢查服務器是否正在運行,快速失敗(也就是提前失敗),例如我想在調用rake:test之前驗證我的rails server是否已經在端口3000上啟動

# Rakefile
task :check_localhost do
  pid = system("lsof -i tcp:3000 -t")
  fail unless pid # or you can use `abort('message')`
end

task :test => :check_localhost do
  puts "****** THIS IS TEST ******"
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM