每分钟cron,确保只有一个实例

chr*_*der 11 linux cron

有没有办法每分钟(或 2、5 等)运行一个脚本,但前提是它尚未运行?

我们有一组需要每分钟运行一次的脚本。有时他们可能会在一秒钟内开始和结束,其他时候他们可能会持续 5 分钟。

我们当前避免同时执行的方法是is_running在每个脚本中设置一个标志,如果它仍然启用则退出。但这有点不可靠(即,即使在脚本停止后,致命错误也会导致标志保持启用状态)。

我们可以编写我们自己的小管理器,但我想知道是否已经存在更时尚的解决方案。

Jav*_*ier 9

更好的方法是使用flockpidfile 代替。检查联机帮助页:flock(1)。优点是无论进程如何完成/死亡,锁都会随之消失。


War*_*ner 1

这是该方法的正确解决方案。通常,将使用 pid 文件并对进程进行 pid 测试以确保其正在运行。如果过时,锁定文件将被删除,并且进程仍将运行。

任何额外的智能通常都作为守护进程写入软件本身,而不是在 cron 中运行。