这是我的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"状态,一切就会正常,这意味着另一个不会启动。但是,当第一次轮到从另一个脚本(其他文件)执行代码时,第二次运行开始执行。
所以我在这里有两个问题:
我应该怎么做才能防止此脚本及其所有"子"在脚本或其"子"仍在运行时运行。(我没有找到比"孩子"之外运行另一个脚本更合适的表达式,很抱歉:))。
根据手册页,-n 导致进程在无法获得锁时退出,但据我所知,它只是等到它可以运行。我错过了什么?
你的问题可能相当平凡。 即
false || ( exit 1 )
不会导致脚本退出。 相反,出口指示子外壳退出。 因此,请将第一行更改为:
flock -n -e 200 || { echo "This script is currently being run"; exit 1; } >&2