900*_*000 3 scripting shell-script lock
我想编写一个长时间运行的 shell 脚本,以便一次只能运行一个副本。如果脚本崩溃,我希望脚本的新调用不会被崩溃调用的锁所阻止。
实用程序lockfile-*
集是否适合使用?在脚本中使用它们时是否有可能出现竞争条件?
是否--use-pid
解除手册页上提到的 5 分钟限制?我的脚本运行时间要长得多。
我在 Amazon EC2 上使用 Ubuntu 10.10 实例;没有 NFS 或类似的东西。
虽然可以使用lockfile
命令或flock
系统调用或通过创建目录(这是一个不可中断的操作)来创建锁,但第二部分更棘手。
如果锁存在 - 您如何确定锁是否属于仍在运行的进程?
最常见的解决方案是将进程的 PID 放入锁文件中。
在尝试创建锁之前,您必须检查锁文件是否已经存在。如果是,请检查 PID 是否匹配正在运行的进程,该进程类似于应该创建锁的进程。如果不是这种情况,请移除锁并重新创建它。