这是我的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中的脚本,只要第一个处于“sleep 5”,一切都很顺利,这意味着另一个没有启动。但是当第一个转向从另一个脚本(其他文件)执行代码时,第二次运行开始执行。
所以我在这里有两个问题:
在脚本或其“子”仍在运行时,我该怎么做才能阻止此脚本及其所有“子”运行。 (我没有找到更合适的表达式来运行除“孩子”之外的其他脚本,对不起:))。
根据手册页,-n导致进程在无法获得锁定时退出,但据我所知,它只是等到它可以运行。我错过了什么?
答案 0 :(得分:7)
你的问题可能相当普通。即,
false || ( exit 1 )
不会导致脚本退出。而是,退出指示子shell退出。所以将你的第一行改为:
flock -n -e 200 || { echo "This script is currently being run"; exit 1; } >&2