
だから私たちはこのスクリプトを実行し、ファイルにデータを追加し、スクリプトがすでに実行されていることを確認するために何かを追加しました。その場合は、一時停止して20秒後にもう一度確認し、実行されないことがわかるまで作業を繰り返したいと思います。この時点で残りのスクリプトを実行し続けたいと思います。そのため、続行できるまで確認を続ける方法を知っておく必要があります。誰にもアイデアがありますか?
if [ `ps -ef| grep $script_name_with_arguments | wc -l ` -gt 1 ]
then
echo "already running"
sleep 20s
else
echo "ok"
fi
}```
答え1
いくつかの種類のロックを使用してください。
最も簡単な方法は、ファイルをロックすることです。これを管理するパッケージがあります。プラットフォームやディストリビューションが何であるかを言っていないため、正確ではありませんが、そのうちの1つはプログラムprocmail
に付属のパッケージですlockfile
。
次のスクリプトで使用できます。
LOCK=/run/npaulsen/mylockfile.lock
lockfile -20 $LOCK
run_the_fscking_rest_of_my_script
rm -f $LOCK
1つのインスタンスがクラッシュした場合は、無限の停止を防ぐためにいくつかの改善を適用できます。これについてのマンページを読むことができますman 1 lockfile
。あるいは、直接実装することもできます。簡単ですが、実際のプログラミング言語(シェルスクリプトではありません)が必要です。
別のより洗練された(しかしより複雑な)アイデアは、POSIXセマフォを使用することですman 7 sem_overview
。