我有一个 cron 作业设置,每 5 分钟运行一次任务。但有时该任务需要超过 5 分钟才能运行,因此该任务的另一个副本由 cron 同时运行。有没有办法在 when 或 cron 中让我们在运行另一个副本之前等待另一个作业完成?
最佳答案
AFAIK 您不能使用任何时候本身来执行此操作,但您可以在脚本中处理此问题。
这可以通过以下解决方案之一完成
file = File.new("cron.lock", "a")
can_lock = file.flock(File::LOCK_EX | File::LOCK_NB)
if can_lock == false
exit 1
else
#do whatever you want
end
第二种方法的优点是,即使进程意外终止,操作系统也会自动释放锁
对我来说,我选择了第一种方法,因为如果前一个过程完成或花费的时间超过特定时间限制,我需要启动另一个过程
有关更多详细信息,请查看 this link
关于ruby-on-rails - 如何防止与 Rails 重叠 cron 作业?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13131627/