我有一个每2分钟运行一次的rsync cronjob,但有时需要更长的时间,然后2分钟。 为此我写了一个简单的locking系统,如果文件没有find写入locking文件,就会执行并删除那个locking文件。
现在,如果脚本崩溃或因为某种原因而死亡,lockfile将徘徊并导致问题。
什么是确保cron任务再次运行的好方法? 我曾经想过检查locking文件的年龄,并删除它,如果年龄较大,然后在一定的时间,但应该有更好的更优雅的解决scheme,我想..
编辑:
我现在已经实施了羊群。 我有点困惑,为什么这个文件似乎总是存在,但我发现这个网页,解释了它是如何工作的,通过存储在文件信息的PID:
http://mattiasgeniar.be/2012/07/24/prevent-cronjobs-from-overlapping-in-linux/
将关键进程的PID作为锁的一部分进行存储,并在再次运行脚本时检查进程是否仍处于活动状态。
更好的方法是使用locking目录而不是locking文件,因为mkdir是一个primefaces操作。 您不必检查锁是否存在,如果不存在,就创build它,这样就留下了一些其他的东西来获取锁的机会。 将关键进程的PID作为文件放入locking目录
在Linux上,你可以使用flock工具为你处理所有这些。
检查进程和locking文件是否存在。 如果其中只有一个存在,则说明有问题,必须正确处理。 例如,如果locking文件存在并且进程没有运行,则删除locking文件并继续。
我知道你有一个自己的locking系统,但我会用fcron和exesev(false)
exesev boolean(false) Can a job be executed several times simultaneously ?