1. ホーム
  2. bash

[解決済み] シェルスクリプトのインスタンスが同時に1つだけ実行されるようにする簡単な方法

2022-04-13 13:46:12

質問

あるシェルスクリプトのインスタンスが1つだけ実行されていることを確認する簡単な方法は何ですか?

どのように解決するのですか?

を使用した実装を紹介します。 ロックファイル を作成し、そこにPIDをechoしています。を削除する前にプロセスが終了した場合の保護として機能します。 ピッドファイル :

LOCKFILE=/tmp/lock.txt
if [ -e ${LOCKFILE} ] && kill -0 `cat ${LOCKFILE}`; then
    echo "already running"
    exit
fi

# make sure the lockfile is removed when we exit and then claim it
trap "rm -f ${LOCKFILE}; exit" INT TERM EXIT
echo $$ > ${LOCKFILE}

# do stuff
sleep 1000

rm -f ${LOCKFILE}

ここでの仕掛けは kill -0 はシグナルを送らず、ただ与えられた PID を持つプロセスが存在するかどうかをチェックします。 また trap ロックファイル は、プロセスが強制終了しても削除されます(ただし kill -9 ).