如果我有一个deployment.sh
,它有两个参数:环境和发布版本。
deployment.sh uat release1
deployment.sh prod release1
我想随时做到:deployment.sh
具有相同环境和发布版本的可以单例运行。但 deployment.sh uat release1
和deployment.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"