对不起,我无法完全关注我的问题。
我正在尝试使用flock来避免同时运行脚本,如接受的答案中所述: How to prevent a script from running simultaneously?
我记得有人说通过这种方式可能会出现无法运行脚本等问题。
有人知道这种可能性吗?
我尝试了以下方案:
我无法想到更复杂的可能性。
答案 0 :(得分:3)
顾名思义,flock
实用程序包含flock(2)
系统调用,其documentation表示它将锁与打开文件表中的fd条目相关联。当最后一个文件描述符关闭时,打开的文件将被删除,并且当进程以任何方式退出时,描述符本身就会自动清除瞬态资源,包括kill -9
。强制关闭机器会擦除正在运行的系统的整个状态,因此与打开的文件相关联的锁也无法在这种情况下生存。因此,及时退出的脚本不应阻止系统。
想到阻塞的一个现实可能性是脚本有一个错误导致它无限期挂起,这确实会阻止其他实例运行。如果预计在实践中发生这种情况,可以通过在获取锁定后立即将脚本PID($$
)写入锁定文件来处理。在获取锁之前,等待锁的进程将使用-w
flock
选项指定超时。如果超时到期,它将从锁定文件中读取挂锁所有者的PID,终止所有者,并重复锁定过程。
理论上的问题是硬编码的文件描述符编号200.如果您的脚本打开200个文件,或者是从没有close-on-exec位的情况下打开200个文件的程序生成的,那么您将破坏现有的文件描述符。这在实践中极不可能发生。