如何在 bash 中安全地创建文件

如何在 bash 中安全地创建文件

我有一个脚本,它创建一个临时文件作为标志,以防止脚本同时运行。目前它使用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)有一些在不同场景下使用的示例,我使用了最后一个。

相关内容