锁定 shell 脚本

900*_*000 3 scripting shell-script lock

我想编写一个长时间运行的 shell 脚本,以便一次只能运行一个副本。如果脚本崩溃,我希望脚本的新调用不会被崩溃调用的锁所阻止。

实用程序lockfile-*是否适合使用?在脚本中使用它们时是否有可能出现竞争条件?

是否--use-pid解除手册页上提到的 5 分钟限制?我的脚本运行时间要长得多。

我在 Amazon EC2 上使用 Ubuntu 10.10 实例;没有 NFS 或类似的东西。

Nil*_*ils 5

虽然可以使用lockfile命令或flock系统调用或通过创建目录(这是一个不可中断的操作)来创建锁,但第二部分更棘手。

如果锁存在 - 您如何确定锁是否属于仍在运行的进程?

最常见的解决方案是将进程的 PID 放入锁文件中。

在尝试创建锁之前,您必须检查锁文件是否已经存在。如果是,请检查 PID 是否匹配正在运行的进程,该进程类似于应该创建锁的进程。如果不是这种情况,请移除锁并重新创建它。