crontab 作业可以与其自身同时运行吗?

crontab 作业可以与其自身同时运行吗?

如果我有一个 crontab 作业,例如每小时运行一次,但该作业可能需要一个多小时才能完成,那么下一个作业是否会无法运行?

答案1

不,如果您不实现某种锁定机制,cron 脚本会并行运行。

确保一次只运行一个 shell 脚本实例的快速而肮脏的方法shell 脚本中的锁定是否正确?寻找可能的解决方案。

一种更简单的方法是使用lockfile,就像这样回答 或 run-one 包(参见这个答案) - 谢谢格特夫戴克因为建议它。

答案2

还有whenjobs其目标是“一个强大但简单的 cron 替代品”。从它的联机帮助页:

前置功能

在作业运行之前,您可以安排调用“pre”函数。该函数可能决定不运行作业(通过返回“false”)。

这样做的一个用途是,如果已存在同一作业的实例正在运行,则阻止特定作业运行:

job "only one"
pre (Whentools.one ())
every 10 seconds :
<<
  # Takes longer than 10 seconds to run, but 'Whentools.one ()'
  # will ensure only one is ever running.
  sleep 11
>>

(它还提供Whentools.max n,允许n运行作业实例。默认情况下,它的工作方式类似于 Cron。)

相关内容