我有一个 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