2017-09-16 97 views
1

我需要检查服务器是否已经自动启动。如果服务器已经启动,则需要启动客户端。如果不执行需要停止。我正在使用shell脚本来启动服务器。基本上我的计划是将终端结果记录到文本文件中,并检查名为“测试服务器启动”的单词。如果该单词存在,则客户端将启动,如果不是全部执行应该终止。如何通过一个小脚本验证启动服务器和客户端

这是我跑的脚本

 #!/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

您可以使用untilnetcat(或nc)来测试您的TCP服务器正在运行。这是你的脚本的修改版本:

#!/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

@詹姆斯抱歉,也许我误解了这个问题。你能否详细说明你的意思是“客户端脚本自动工作”。我发布的脚本将等待TCP服务器开始监听,然后运行客户端脚本。如果您需要真正解析服务器的输出,那么我会指出您的答案:https://unix.stackexchange.com/a/117502 –

相关问题