Bash:如何在执行外部脚本时锁定



这是我的bash代码:

(
flock -n -e 200 || (echo "This script is currently being run" && exit 1)
    sleep 10
    ...Call some functions which is written in another script...
    sleep 5
) 200>/tmp/blah.lockfile

我连续从两个 shell 运行脚本,只要第一个处于"睡眠 5"状态,一切就会正常,这意味着另一个不会启动。但是,当第一次轮到从另一个脚本(其他文件)执行代码时,第二次运行开始执行。

所以我在这里有两个问题:

  1. 我应该怎么做才能防止此脚本及其所有"子"在脚本或其"子"仍在运行时运行。(我没有找到比"孩子"之外运行另一个脚本更合适的表达式,很抱歉:))。

  2. 根据手册页,-n 导致进程在无法获得锁时退出,但据我所知,它只是等到它可以运行。我错过了什么?

你的问题可能相当平凡。 即

false || ( exit 1 )

不会导致脚本退出。 相反,出口指示子外壳退出。 因此,请将第一行更改为:

flock -n -e 200 || { echo "This script is currently being run"; exit 1; } >&2

相关内容

  • 没有找到相关文章

最新更新