我有一个cronjob,每隔一分钟执行一次,通常在几秒钟内运行,但有时会持续几分钟。
如果命令在下一分钟到来时已经运行,我需要cron不执行命令。
这条线看起来像这样 * / 1 * * * * cmd
我试过这个 * * * * * ID = job1 FREQ = 1m AFTER = job1 cmd
但没有成功。
是否可以用cron解决,还是必须实现锁定?
答案 0 :(得分:5)
您可以创建一个名为inProgress(或其他)的临时文件,并将其存储在标准位置,如果它应该运行,则使用它来与下一个作业进行通信。
如果工作流程如下:
答案 1 :(得分:2)
锁定是实现这一目标的一种方法,或者您可以使用类似于Cron的程序,我创建了一个名为The Fat Controller的程序来解决这个问题。
您可以设置一个间隔,以便在脚本结束的一个实例与另一个脚本结束的实例之间等待,而不是每隔x分钟运行一次。
您甚至可以更进一步使用退出代码告诉胖控制器不要等待并立即再次运行脚本,例如,如果处理有限数量的项目的脚本知道它仍然有更多处理仍需处理它结束了。这是处理批处理的好方法。
网站上有更多用例和示例: