唯一一致的缺点是使用会产生额外的开销flock
。除了必须打开文件并将其锁定的明显方面之外,您还有一个事实,即将涉及另一个进程(或者至少是一个额外的可执行文件,exec()
如果您使用该--no-fork
选项则调用),并且有一些清理中的额外开销(因为操作系统在自动关闭文件时必须释放锁)。
还有一些其他真正具有情境特定的缺点来锁定像这样的cron作业(这不是一个详尽的列表):
- 如果需要独占锁,则需要可写文件系统路径,否则
flock
命令将始终失败。这意味着:
- 如果您不小心,文件系统错误可能会完全阻止您的cron作业运行(如果它导致您用于锁定的路径以只读方式重新装入)。
- 在一些严密安全的设备上,您可能必须为cron作业提供一些额外的权限,以便它们可以运行。
- 在某些情况下,您实际上希望cron作业的新实例是继续的实例,而不是旧实例。我能给出的最好的例子是一个高频的cron作业,它每隔几分钟运行一次,以便将文件同步到另一个系统,等待上一个实例完成后可能会将最近的更新延迟一段时间。相反,如果你有cron作业在启动时杀死它自己的任何旧副本,你仍然可以继续进行,并且最近的更改更有可能快速传播出来。