编写锁定系统

编写锁定系统

我有一个 rsync 的 cronjob,每 2 分钟运行一次,但有时需要超过 2 分钟。为此,我编写了一个简单的锁定系统,它会检查,如果找不到文件,则写入锁定文件,采取行动并删除该锁定文件。

现在,如果脚本崩溃或者由于某种原因被终止,那么锁文件将会持续存在并导致问题。

有什么好方法可以确保 cron 任务在某个时间点再次运行?我曾考虑过检查锁文件的使用期限,如果超过一定期限就删除它,但我认为应该有更好、更优雅的解决方案。

編輯:

我现在已经实现了 flock。我有点困惑为什么文件似乎总是存在,但我找到了这个页面,它解释了它的工作原理,通过将 pid 存储在文件信息中:

http://mattiasgeniar.be/2012/07/24/prevent-cronjobs-from-overlapping-in-linux/

答案1

将关键进程的 PID 存储为锁的一部分,当您再次运行脚本时检查该进程是否仍然处于活动状态。

更好的方法是使用锁定目录而不是锁定文件,因为 mkdir 是原子操作。您不必检查锁定是否存在,如果不存在则创建它,这为其他程序获取锁定留下了机会。将关键进程的 PID 作为文件等放在锁定目录中。

在 Linux 上,您可以使用实用程序可以为您处理所有这些事情。

答案2

检查进程锁文件存在。如果只有一个存在,则说明存在问题,必须正确处理。例如,如果锁文件存在并且进程未运行,则删除锁文件并继续。

答案3

我知道你有自己的锁定系统,但我会用克隆和 exesev(false)

exesev
boolean(false)
Can a job be executed several times simultaneously ?

相关内容