控制bash脚本并发、flock继承

控制bash脚本并发、flock继承

我有一个 bash 部署脚本,用于处理将更新的代码部署到 CentOS 上的 Tomcat 实例,但是,Chef 和 RunDeck 都可能调用该脚本,并且由于 Chef 定期运行,因此可能会发生冲突。

如何防止部署脚本同时运行两次?

标准答案似乎是将部署逻辑包装在flock.

然而,由于部署重新启动了不工作的 tomcat,新的 java 进程继承了锁并阻止任何进一步的部署脚本执行。

是否有其他方法可以防止并发执行或防止flock继承?

答案1

flock您可以在运行要解锁的程序之前关闭保持锁定的文件描述符。

(
  flock -n 9 || exit 120
  (exec 9>&-; tomcat &)
) 9>/var/run/my.lock

相关内容