在 cron 作业中使用 flock 有什么缺点吗?

在 cron 作业中使用 flock 有什么缺点吗?

我使用几个 cron 作业,它们经常运行,我使用flockflock以防止重复运行作业。我只是认为,无论频率如何,在每个作业上使用它似乎都是有意义的,但这样做有什么缺点吗?

我 100% 使用 Linux,拥有 Mint、Raspbian 和 Ubuntu 服务器。

答案1

唯一一致的缺点是使用会产生额外的开销flock。除了必须打开文件并锁定它的明显方面之外,您还需要考虑到将涉及另一个进程(或者至少是一个额外的可执行文件和调用,exec()如果您使用该--no-fork选项),并且清理过程中会产生一些额外的开销(因为操作系统必须在自动关闭文件时释放锁)。

锁定 cron 作业还存在其他一些特定情况的缺点(这不是一个详尽的列表):

  • 如果需要独占锁,则需要可写的文件系统路径,否则命令flock将始终失败。这意味着:
    • 如果您不小心,文件系统错误可能会完全阻止您的 cron 作业运行(如果它导致您用于锁的路径以只读方式重新挂载)。
    • 在一些高度安全的设备上,您可能必须向 cron 作业提供一些额外的权限才能运行。
  • 在某些情况下,您实际上希望 cron 作业的新实例继续运行,而不是旧实例。我能给出的最好例子是每隔几分钟运行一次以将文件同步到另一个系统的高频 cron 作业,等待前一个实例完成可能会将最近的更新延迟任意长的时间。相反,如果您让 cron 作业在启动时终止其自身的任何旧副本,您仍然可以继续运行,并且最近的更改更有可能快速传播出去。

相关内容