0
私はbashスクリプトにバックグラウンドで無期限に実行する関数を持っています。これは、同じスクリプトを再実行することによって終了されます。それはスイッチの一種です。私がこのスクリプトを起動すると、起動しているか、既に実行中の場合はその関数を強制終了します。私は複数の実行中のインスタンスと競合状態を回避したいと思い、今PIDファイルをロックする
#!/bin/bash
background_function() {
...
}
if [[ ! -s myscript.pid ]]
then
background_function &
echo $! > myscript.pid
else
kill $(cat myscript.pid) && rm myscript.pid
fi
:これを行うには、私はPIDファイルを使用します。私は群れを使用しようと、私はこのように上記のコード書き直しました。そうすることで
#!/bin/bash
background_function() {
...
}
exec 200>myscript.pid
if flock -n 200
then
background_function &
echo $! > myscript.pid
else
kill $(cat myscript.pid) && rm myscript.pid
fi
を、しかし、私はPIDファイルをロックしているが、私は再びpidファイルをスクリプトを起動するたびに書き換えられますexec 200>myscript.pid
となっており、すでに実行中のインスタンスのPIDを取得できず、終了できません。
どうすればよいですか?私は2つの異なるファイル、pidファイルとロックファイルを使うべきですか?または、mkdirとtouchを使用して他のロック機構を実装する方が良いでしょうか?ありがとう。
それは興味深いアプローチであり、それは私のために動作します。トリッキーな部分は、バックグラウンドでプロセスの正しいPID( 'background_function&; echo $!> lock.pid')でPIDファイルを書き換えることです。ありがとうございました! –