助けが必要です。私はスクリプト 'Script 1' を持っています。これは 'Script 2' を呼び出してバックグラウンドで実行し、定期的に何かをチェックします。しかし、スクリプト 1 が複数回呼び出されても、スクリプト 2 は 1 回だけ開始する必要があります。それを行う方法はありますか?
誰かがこれを達成するためのコマンドをいくつか提案してくれれば、さらに役に立ちます。
前もって感謝します
確かに、次のようなものを の一番上に置くことができますScript2
:
if [[ -f /tmp/Script2HasRun ]] ; then
exit
fi
touch /tmp/Script2HasRun
もちろん、ファイルが削除されない限り、センチネルファイルを使用することで二度と実行されScript2
なくなります/tmp
。.
そのため、より適切に保護できる別の場所に配置することをお勧めします。
二度と実行するのを止めたくない場合は、sentinel ファイルを削除するメカニズムが必要です。
たとえば、一度に 1 つのコピーのみを実行することを意図している場合は、次のようになります。
if [[ -f /tmp/Script2IsRunning ]] ; then
exit
fi
touch /tmp/Script2IsRunning
# Do whatever you have to do.
rm -f /tmp/Script2IsRunning
また、2 つのコピーが実行される可能性がある競合状態があることに注意してください。次のようなコンテンツと存在を使用して、それを軽減する方法もあります。
if [[ -f /tmp/Script2IsRunning ]] ; then
exit
fi
echo $$ >/tmp/Script2IsRunning
sleep 1
if [[ "$(cat /tmp/Script2IsRunning 2>/dev/null)" != $$ ]] ; then
exit
fi
# Do whatever you have to do.
rm -f /tmp/Script2IsRunning
それを超える保護レベルがありますが、それらは複雑になり、ほとんどの場合はそれで十分だと思います.