bashスクリプトのインスタンスを1つだけ実行させる方法は?

bashスクリプトのインスタンスを1つだけ実行させる方法は?

追加のツールを必要としないソリューションが推奨されます。

ベストアンサー1

nsgの答えとほぼ同じです。ロックを使用してください。目次。ディレクトリの作成は、linux、unix、* BSD、その他多くのオペレーティングシステムでアトミックに行われます。

if mkdir -- "$LOCKDIR"
then
    # Do important, exclusive stuff
    if rmdir -- "$LOCKDIR"
    then
        echo "Victory is mine"
    else
        echo "Could not remove lock dir" >&2
    fi
else
    # Handle error condition
    ...
fi

デバッグ目的でロックshのPIDをロックディレクトリ内のファイルに入れることができますが、PIDをチェックしてロックプロセスがまだ実行中であることを確認できると考えるトラップに陥らないでください。そのプロセスには多くの競争条件があります。

おすすめ記事