这种与 if-else 一起使用的集群安全吗?

这种与 if-else 一起使用的集群安全吗?

我有两个 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

相关内容