Bash脚本可确保仅一个脚本实例正在运行,其他实例正在等待

时间:2018-11-05 16:43:34

标签: linux bash ubuntu

我有一个bash脚本runner.sh,它会调用另一个script.shscript.sh仅从runner.sh被调用。我一次只能执行script.sh的一个实例。如果对runner.sh进行了多次调用,则runner.sh应该在script.sh已经运行的情况下使所有调用者都等待。 script.sh完成后,它将允许等待的呼叫者之一执行script.sh

有人可以建议实现这一目标的一些方法吗?

1 个答案:

答案 0 :(得分:3)

来自man flock

  

[“ $ {FLOCKER}”!=“ $ 0”] && exec env FLOCKER =“ $ 0” flock -en“ $ 0”“ $ 0”   “ $ @” || :

     

这是用于shell脚本的有用的样板代码。放在   您要锁定的Shell脚本的顶部,它将自动   在第一次运行时锁定自己。如果env var $ FLOCKER未设置为   正在运行的shell脚本,然后执行flock并抓取一个   排他非阻塞锁(使用脚本本身作为锁文件)   然后使用正确的参数重新执行。它还设置了   将FLOCKER env var设置为正确的值,这样它就不会再次运行。

将其放在./script.sh之上(或runner.sh之上),您就可以了。