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