- Rails & cron & 每当/服务器负载过重时的几分钟延迟

问题描述

我使用一个名为 every 的 gem 来管理我的 cron 作业。 在 cronfile 中,我每 1 分钟就有一个 cron 作业,它调用一个任务 XXXX。我的config/schedule.rb是这样的:

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

这项 cron 作业运行良好,但稍有延迟。进程创建后几秒钟,任务 XXXX 开始运行它的第一行。由于此任务在不到 1 分钟内完成,因此我不应该同时有多个进程。

但是服务器负载很重,这个延迟会变成几分钟。
这导致许多未完成的进程保留在我的进程列表中,因为 cron 作业每分钟创建一个进程。

这会导致服务器变重,最坏的情况下,服务器完全死机。

为什么会这样?如何防止 cronjob 延迟调用任务?

解决方法

你可以添加一个 dependent task 来检查服务器是否正在运行,快速失败(也就是提前失败),例如我想验证我的 rails server 已经在端口 {{ 1}} 之前调用 3000

rake :test

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...