锁定 shell 脚本

锁定 shell 脚本

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

lockfile-*实用程序集使用正确的东西吗?在脚本中使用它们时是否有可能出现竞争条件?

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

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

答案1

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

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

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

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

相关内容