監視したいディレクトリがあります。アップデート後、incronでいくつかのコマンドを実行しました。このディレクトリに複数のファイルをコピーすると、incronは同時に複数のコマンドを実行します。 incronジョブの1つが実行されているときに2番目のジョブが実行されないようにする方法はありますか?私はフォローしましたこのチュートリアルご案内のため。
答え1
いいえ、incronにはロック機能が組み込まれていません。ジョブが同時に実行されるのを防ぐには、ジョブ内でこれを実行してください。
前のジョブが完了するまでジョブを延期するには、そのジョブをロックしたままにします。あなたはそれを使用することができますflock
注文する。マニュアルページに例があります。
以前のジョブがまだ完了していない場合は、ジョブをスキップするためにそのジョブを引き続き使用できますが、タイムアウトflock
はゼロです。ロックを獲得できない場合は終了します。これは競合状態が発生しやすいことに注意してください。ジョブ#1がファイルの列挙を完了した後にロックを解除する時間になる前に、新しいファイルがコピーされ、ジョブ#2がロックがコピーされたことがわかる場合があります。ファイルを処理せずに残り、終了します。この競合を解決する簡単な方法はありません。
答え2
最も簡単な解決策の例:1はファイルがロックされていること(前のスクリプトがすでに実行されている)を意味し、0がロック解除されている(プロセスが実行されていない)ことを意味します。
それではコードです。
state=`cat /tmp/my_lck`
if [ "$state" -eq 1 ];then
echo "Already executing!!!"
exit
else
#Lock the file
echo 1 > /tmp/nws_lck
#Put you code here
#Unlock
echo 0 > /tmp/nws_lck
fi