[英]- 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.