如何确保带参数的 bash 脚本只运行一个实例?

如何确保带参数的 bash 脚本只运行一个实例?

如果我有一个deployment.sh,它有两个参数:环境和发布版本。

deployment.sh uat release1
deployment.sh prod release1

我想随时做到:deployment.sh具有相同环境和发布版本的可以单例运行。但 deployment.sh uat release1deployment.sh prod release1可以同时运行。

这个怎么做。谢谢

答案1

实现此目的的一种方法是文件锁定,它明确用于仅从多个进程中选择一个进程。看man flock

#! /bin/bash

category="$1"
if [ 'uat' != "$category" ] && [ 'prod' != "$category" ]; then
    exit 2
fi

(
    flock -n 9 || exit 1
    # ... commands executed under lock ...
) 9>/var/lock/"$category"

相关内容