スクリプトが同時に実行されるのを防ぐために、一時ファイルをフラグとして生成するスクリプトがあります。現在はを使用します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を使用すると、要求された質問に正確に答えることはできませんが(ファイルは安全に生成されません)、私の要件には十分です(ロックによってスクリプトの重要な部分が同時に複数回実行されるのを防ぐことができるため)。
上記のコードは次のように変更されました。次に、ファイルのファイル記述子を開き、開いた/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)さまざまなシナリオで使用されるいくつかの例がありますが、私は最後の例を使用しました。