【发布时间】:2019-02-15 21:34:24
【问题描述】:
我的脚本不能同时运行多次。因此它会创建一个锁定文件,并在退出之前将其删除。它会在开始工作之前检查锁定文件是否不存在。
一种非常常见的锁定方法是something like this:
function setupLockFile() {
if (set -o noclobber; echo "lock" > "$lockfile") 2>/dev/null; then
trap "rm -f $lockfile; exit $?" INT TERM EXIT
else
echo "Script running... exiting!"
exit 1
fi
}
但是存在竞争条件 - 如果文件不存在,if 会创建文件,并且脚本可以在定义 trap 之前终止。那么lockfile就不会被删除了。
那么什么是安全的方法呢?
【问题讨论】: