Bashでファイルを安全に生成する方法

Bashでファイルを安全に生成する方法

スクリプトが同時に実行されるのを防ぐために、一時ファイルをフラグとして生成するスクリプトがあります。現在はを使用しますtempfile

if ! tempfile -n /tmp/updating > /dev/null; then
    echo 'Another synchronization is currently running' >&2
    exit 1
fi

このプログラムはもう廃止され、使用することをおtempfile勧めしますが、同様のオプションがないようです。mktempmktemp-n

Ubuntu 21.04を使用しています。

それでは、フラグファイルを安全に生成するにはどうすればよいですか?

答え1

誰かがコメントに「群れ」を提案して削除しました。 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)さまざまなシナリオで使用されるいくつかの例がありますが、私は最後の例を使用しました。

関連情報