3

これが私のbashコードです:

(
flock -n -e 200 || (echo "This script is currently being run" && exit 1)
    sleep 10

    ...Call some functions which is written in another script...

    sleep 5

) 200>/tmp/blah.lockfile

私は2つのシェルからスクリプトを連続して実行しており、最初のシェルが「スリープ5」にある限り、すべてがうまくいきます。つまり、もう一方のシェルは起動しません。ただし、最初のターンで別のスクリプト(別のファイル)からコードを実行すると、2番目の実行が実行を開始します。

だから私はここに2つの質問があります:

  1. スクリプトまたはその「子」がまだ実行されているときに、このスクリプトとそのすべての「子」が実行されないようにするにはどうすればよいですか。(「子」以外の別のスクリプトを実行するためのより適切な式が見つかりませんでした。申し訳ありません:))。

  2. マニュアルページによると、-nを使用すると、ロックの取得に失敗したときにプロセスが終了しますが、私が見る限り、実行できるようになるまで待つだけです。私は何が欠けていますか?

4

1 に答える 1

7

あなたの問題はかなり平凡かもしれません。つまり、

false || ( exit 1 )

スクリプトを終了させません。むしろ、exitはサブシェルに終了するように指示します。したがって、最初の行を次のように変更します。

flock -n -e 200 || { echo "This script is currently being run"; exit 1; } >&2
于 2012-11-25T17:31:33.490 に答える