3

我有一个每秒钟执行一次的 cronjob,通常在几秒钟内运行,但有时持续几分钟。

如果下一分钟到来时它已经在运行,我需要 cron 不执行命令。

该行看起来像这样 */1 * * * * cmd

我试过这个 * * * * * ID=job1 FREQ=1m AFTER=job1 cmd

但没有成功。

是否可以使用 cron 解决或者我必须实现锁定?

4

2 回答 2

5

您可以制作一个名为 inProgress (或其他)的临时文件并将其存储在标准位置,并使用它与下一个作业进行通信(如果它应该运行或不运行)。

如果工作流程是这样的:

  1. 检查标准的 inProgress 文件
  2. 如果存在,退出
  3. 否则,创建 inProgress 文件
  4. 做工作
  5. 删除进行中的文件。
于 2010-09-06T15:53:50.560 回答
2

锁定是实现此目的的一种方法,或者您可以使用类似于 Cron 的程序,称为胖控制器,我创建它来解决这个问题。

您可以设置一个间隔以在脚本的一个实例结束和另一个脚本开始之间等待,而不是每 x 分钟运行一次。

您甚至可以更进一步,使用退出代码告诉胖控制器不要等待并立即再次运行脚本,例如,如果处理有限数量的项目的脚本知道它在结束时仍有更多处理工作要做。这是处理批处理的好方法。

网站上有更多用例和示例:

http://www.4pmp.com/fatcontroller/

于 2011-05-20T10:49:24.317 回答