2017-09-16 10 views
1

サーバーが自動的に起動したかどうかを確認する必要があります。サーバが起動している場合は、クライアントを起動する必要があります。実行が停止される必要がない場合。シェルスクリプトを使用してサーバーを起動しています。基本的に私の計画は、テキストファイルに端末の結果を記録し、 "Test server started"という単語をチェックします。単語が存在する場合はクライアントが起動し、そうでない場合は実行を終了する必要があります。小さな検証で1つのシェルスクリプトを使用してサーバーとクライアントを起動する方法

これは私が、サーバーを停止した後、句がチェックされている場合は、この実行スクリプトによると、私の実行スクリプト

 #!/bin/bash 

    CLASSPATH=.:target/classes:target/parent-4.0.0-SNAPSHOT-jar-with-dependencies.jar 
    JAVA_OPTS="-Xmx8g -Xms8g" 

    HOST="localhost" 
    PORT="9893" 

    FULL_EXPERIMENT_PERIOD=15 
    WARM_UP_PERIOD=10 

    FILENAME="/home/james/projects/streamperf/git/benchmarks-local/sample.txt" 

    java $JAVA_OPTS -cp $CLASSPATH org.wso2.sp.tcp.server.TCPServer $HOST $PORT $FULL_EXPERIMENT_PERIOD $WARM_UP_PERIOD & 

    if grep -q "Test server started" "$FILENAME";then 
     sh client.sh 

    fi

です。しかし、私はそれがサーバーを起動した後にチェックする必要があります(自動的に実行する必要があります)。どうすればこの問題を解決できますか?事前

おかげ

答えて

1

あなたのTCPサーバーが稼働しているかどうかをテストするためにuntilnetcat(またはnc)を使用することができます。ここでは、スクリプトの修正版です:

#!/bin/bash 

CLASSPATH=.:target/classes:target/parent-4.0.0-SNAPSHOT-jar-with-dependencies.jar 
JAVA_OPTS="-Xmx8g -Xms8g" 

HOST="localhost" 
PORT="9893" 

FULL_EXPERIMENT_PERIOD=15 
WARM_UP_PERIOD=10 

FILENAME="/home/james/projects/streamperf/git/benchmarks-local/sample.txt" 

java $JAVA_OPTS -cp $CLASSPATH org.wso2.sp.tcp.server.TCPServer $HOST $PORT $FULL_EXPERIMENT_PERIOD $WARM_UP_PERIOD & 

# create test file 
echo "" > test.txt 

until nc $HOST $PORT < test.txt 
do 
    echo "waiting for tcp server..." 
    sleep 1 
fi 

sh client.sh 

このスクリプトは、コマンドnc $HOST $PORT < test.txtが0終了コードを返すまで待ってからに移動します。

+0

お返事ありがとうございます。しかし、このスクリプトによれば、クライアントスクリプトはサーバーの稼動後自動的に動作しますか?私は試しましたが、そうではありません – James

+0

@James申し訳ありませんが、多分私はその質問を誤解しました。あなたは "クライアントスクリプトの仕事を自動的に"意味するものを詳しく説明できますか?私が掲示したスクリプトは、TCPサーバーがリッスンを開始してクライアントスクリプトを実行するのを待つだけです。実際にサーバーの出力を解析する必要がある場合は、この回答を参照します。https://unix.stackexchange.com/a/117502 –

関連する問題