我有一个脚本,它创建一个临时文件作为标志,以防止脚本同时运行。目前它使用tempfile
,例如
if ! tempfile -n /tmp/updating > /dev/null; then
echo 'Another synchronization is currently running' >&2
exit 1
fi
该tempfile
程序现已弃用,建议使用mktemp
它,但mktemp
似乎没有类似于 的选项-n
。
我使用的是 Ubuntu 21.04。
那么我应该如何安全地创建标志文件呢?
答案1
有人在评论中提出了“flock”,然后又删除了。虽然使用flock并不能完全回答所问的问题(文件未安全创建),但它足以满足我的需要(因为锁确实阻止了脚本的关键部分同时运行多次)
上面的代码已更改如下:它现在打开文件的文件描述符,/tmp/updating
然后锁定打开的文件描述符。
exec 4<>/tmp/updating
if ! flock --nonblock --exclusive 4; then
echo 'Another synchronization is currently running' >&2
exit 1
fi
在释放锁的脚本末尾是一个rm /tmp/updating
.我不再需要这样做,因为当脚本退出时,羊群将自动释放。
的手册页羊群(1)有一些在不同场景下使用的示例,我使用了最后一个。