我有两个 shell 脚本,它们可以并行运行,但也可以一次运行一个。这两个脚本都依赖于初始设置步骤,该步骤需要一段时间并且不能同时运行。
为了允许其余部分的并行执行,我使用以下命令将设置步骤包装在控制流中flock
基于这个建议。
这似乎工作正常,但我不确定 if-else 结构是否完全安全。这里是否有我遗漏的隐藏问题?
set -euxo pipefail
(
# Only run setup if we're the first to acquire the lock
if flock -x -n 200 ; then
# Time-consuming setup that can't be run in parallel
else
# Wait for the lock to be released and then continue, timeout on 600s
flock -x -w 600 200;
fi
) 200>/tmp/setup.lock
# Rest of the script that relies on setup being done