2017-06-11 16 views
0

私のマイクロサービスを新しいコマンドラインで開き、そこから順番に実行したい。以下の私のbashスクリプトTCPポートが開くまで待つbashコマンド

################ first SERVER ##################### 
gnome-terminal -x sh -c 'java -jar server/target/first-server.jar; exec bash' 

################ second SERVER ##################### 
export service_port=8771 
export host_name=firstdomain 
gnome-terminal -x sh -c 'java -Dservice.port="${service_port}" -Dhost.name="${host_name}" -jar eureka/target/second-server.jar; exec bash' 

は問題が成功し「最初-server.jar」を開始した後、私は私の「第二server.jar」を開始したいということです。サービスがネットワークポートをリッスンしているかどうかを確認することで、それを検出できます。これをアーカイブする方法はありますか? sleep bashコマンドは私にとってはオプションではありません。

+0

質問は、first-server.jarが正常に開始されたことをどのように知っていますか? (ポートは開いていますか?ファイルが作成されますか?)その質問に対する答えは、あなたの問題を解決するものです。 – Jack

+0

マイクロサービスが開始されている場合、ポートが開かれると言います。 bashコマンドは何でしょうか。 – user2567005

+0

'netstat -na | grep LISTENING | grep: ' – Jack

答えて

1

基本的には、sleepコマンドを使用する必要があります。しかし、ポートが利用可能になった場合には、ループチェックで継続的に使用することができます。しかし、どのようにポートの可用性を確認するには?

1つのオプションは、netstatコマンドをJackの示唆通りに使用することです。正しい使用法は次のとおりです。

ここで、NNNNはポートです。条件は上に待機することを確認するには、次のループ記述することができます。

while ! netstat -tna | grep 'LISTEN\>' | grep -q ':NNNN\>'; do 
    sleep 10 # time in seconds, tune it as needed 
done 

grepの最後のインスタンスで-qオプションを気にしてください。

他のオプションでは、ポートに接続できるかどうか、チェックすることです:

{ 
    while ! echo -n > /dev/tcp/localhost/NNNN; do 
    sleep 10 
    done 
} 2>/dev/null 

使用しているとオプションのbashは、この方法がまたは動作しない場合があり、でコンパイルされているディストリビューションによっては。

while ! nc -q0 localhost 2222 </dev/null> /dev/null 2>&1; do 
    sleep 10 
done 

あなたのホスト名またはIPアドレスとローカルホストを置き換えることができます。

ポートがアクセス可能であるかどうかを確認するために別のオプションは、NCを使用することです。

+0

私の 'netstat'は、" LISTENING "と" NNNN "の後に余分な文字を入れません。 – Jack

+0

@Jackこれらの余分な文字は 'grep'パターン用です。以下のコマンドを考えてみましょう: 'echo -e '80 \ n8080 '| grep^80'と 'echo -e '80 \ n8080 '| grep '^ 80 \>' 'そして、 'LISTENING'はUnixベースのソケットです。リッスン状態のネットワークソケットは 'LISTEN'と表示されます。 – ArturFH

+0

'grep'文字列の一部として' \> 'を置くと失敗します。 – Jack

関連する問題