0

いくつかのファイルを含む2つのディレクトリがあります。私はHadoopを使用していますが、これら2つのディレクトリは両方ともHadoopファイルシステムです。

ディレクトリの最初の場所-

/sys/edw/

ディレクトリの2番目の場所-

/apps/only/

these two directoriesあるかどうか見たいですfiles or not。いくつかのファイルが含まれている場合は、ファイルがcontinue and execute my other shell scripts含まれていない場合はwait for half an hour、ファイルがこれら2つのディレクトリに到着したかどうかをもう一度確認します。

到着した場合は他のシェルスクリプトを実行しますが、到着していない場合は30分待ってから、30分ごとにチェックを続けます。

アルゴリズム-

If [ hadoop fs -ls /sys/edw/   AND hadoop fs -ls /apps/only/ ]
then
continue executing my other shell scripts
but if condition is not true
wait for half an hour and then check again with the if loop and keep on looking every half an hour until the if condition is not true

上記の条件が真の場合にのみ、以下のスクリプトを実行したいと思います。

query.sh

基本的に、実行したいスクリプトはほとんどありません 。それ以外の場合は、をチェックして確認しif condition is true続けます。every half an hourif condition is true or not

私は走っているSunOS 5.1

更新されたコード:-

私は以下のようなことを試みていますが、ファイルはこのディレクトリ(/ apps / hdmi / 20120916)に存在しないため、30分間スリープする必要がありますが、スリープする代わりに、他のシェルスクリプトを実行します。やってる-

while [ ! hadoop fs -ls /apps/hdmi/20120916 ]; do
    sleep 1800
done

echo "Hello new11"
pwd

私がしている何か問題がありますか?

もう一度更新:-

while ! hadoop fs -ls /apps/hdmi/20120916 ; do
    sleep 1800
done

echo "Hello new11"
pwd

上記のものも試しましたが、このディレクトリは存在せず(/ apps / hdmi / 20120916)、30分間スリープする代わりに、Hello new11実行されるべきではないものが出力されます。30分待つ必要があります。他に足りないものはありますか?私は走っていますSunOS 5.1

4

3 に答える 3

2

を使用したくない場合はcron、無限ループを使用できます。

while true; do
  if hadoop fs -ls /apps/hdmi/20120916; then
    query.sh # call other script
    break # exit loop
  else
    sleep 1800
  fi
done

あなたの要件を正しく理解できたことを願っています。

于 2012-09-16T18:20:52.357 に答える
1

使用できませんwhile ! COMMAND; do!このコンテキストでは否定演算子ではありません。あなたがしたいことはhadoop fs -ls /DIR、コマンドがファイルをリストしないときにコマンドを実行してスリープすることです。

コマンドを実行するには、バッククォートの間に入れます``

`hadoop fs -ls /apps/hdmi`

testまたは角括弧を使用[ ]して、コマンドの出力を評価します。

[ `hadoop fs -ls /apps/hdmi` ]

式はtrue、コマンドがゼロ以外の文字列を生成する場合 (つまり、ディレクトリにファイルがある場合) に評価されます。それはあなたが望むものとは反対なので(ファイルがない間続ける)、式を否定する必要があります。

[ ! `hadoop fs -ls /apps/hdmi` ]

したがって、スクリプトは次のようになります。

while [ ! `hadoop fs -ls /apps/hdmi` ]; do
  sleep 1800
done

echo "Hello new11"

pwd

hadoop fs -lsこれは、ディレクトリにファイルがない場合、 が出力を生成しないことを前提としています。

于 2012-09-16T18:53:13.937 に答える
0

条件が真になったときにスクリプトを終了させたい場合はsleep 1800、スクリプトを 1800 秒間 (30 分) スリープさせ、それをwhileループします。

while [ ! condition ]; do
    sleep 1800
done

# execute other scripts since condition is now true
于 2012-09-16T01:34:46.493 に答える