问题描述
我使用一个名为 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