CentOSのTomcatインスタンスに更新されたコード配布を処理するbash配布スクリプトがありますが、ChefとRunDeckの両方がこのスクリプトを呼び出すことができ、Chefが定期的に実行されるため、競合が発生する可能性があります。
配布スクリプトが同時に2回実行されるのを防ぐ方法は?
標準的な答えは配布ロジックをflock
。
しかし、デプロイが機能していないTomcatを再起動したため、新しいJavaプロセスはロックを継承し、追加のデプロイスクリプトの実行を防ぎました。
同時実行を防止するか継承を防止する他の方法はありますかflock
?
答え1
flock
ロックを解除したいプログラムを実行する前に、ロックされているファイル記述子を閉じることができます。
(
flock -n 9 || exit 120
…
(exec 9>&-; tomcat &)
) 9>/var/run/my.lock