Powered by Google App Engine

シェルスクリプト

 

bashでtomcatの開始が完了するまで待つ

tomcatがstartupしてhttpステータスが返る状態になるまで待つスクリプトです!tomcat起動後にapacheのgraceful等を実行する場合等に使えます。

新サイト、tree-mapsを公開しました!!

tree-maps: 地図のWEB TOOLの事ならtree-mapsにお任せ!

地図に関するWEB TOOL専門サイトです!!

大画面で大量の緯度経度を一気にプロット、ジオコーディング、DMS<->DEGの相互変換等ができます!

◯ 広告

通常tomcatを起動スクリプトで起動すると、起動完了より速く起動スクリプトが完了します。

これだと困る場合があるので、tomcatの起動が完了し終わるまで待ちたいですね。

startup.shを実行すると一瞬で終了してしまいますが、tomcatは開始し終わっていません。

localhost:bin tree$ ./startup.sh
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/java
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar

今回のスクリプトは↓ここまで完了してhttpステータスが返るまで待ちます。

8 21, 2013 11:14:00 午後 org.apache.coyote.AbstractProtocol start
情報: Starting ProtocolHandler ["http-bio-8080"]
8 21, 2013 11:14:00 午後 org.apache.coyote.AbstractProtocol start
情報: Starting ProtocolHandler ["ajp-bio-8009"]
8 21, 2013 11:14:00 午後 org.apache.catalina.startup.Catalina start
情報: Server startup in 779 ms
#!/bin/sh
waitTomcatStarted() {
    # tomcat起動の監視間隔(単位は秒)
    SLEEP_TIME=5
    # 最大監視回数
    MAX_WAIT_COUNT=6
    # 現在の監視回数
    waitCount=0
    # 最大監視時間(単位は秒)
    MAX_WAIT_TIME=`expr ${SLEEP_TIME} \* ${MAX_WAIT_COUNT}`
    # 監視するtomcatのURL
    TOMCAT_URL="http://localhost:8080/"

    # tomcatがレスポンスを返すまで監視する
    until [ "`curl --silent --show-error --connect-timeout 1 -I ${TOMCAT_URL} | egrep 'Coyote'`" != "" ];
    do
        if [ ${waitCount} -eq ${MAX_WAIT_COUNT} ]; then
            echo "`expr ${SLEEP_TIME} \* ${waitCount}`秒待ちましたがtomcatが起動しませんでした。"
            return 1
        fi
        waitCount=`expr ${waitCount} + 1`
        sleep ${SLEEP_TIME}
        echo "--- sleep ${SLEEP_TIME} seconds [`expr ${SLEEP_TIME} \* ${waitCount}` / ${MAX_WAIT_TIME}]"
    done

    if [ `curl --silent --connect-timeout 1 -I ${TOMCAT_URL} | egrep '200 OK' | wc -l` -eq 0 ]; then
        echo "tomcatは起動しましたが、HTTPステータスが200ではありませんでした。"
        return 1
    fi
    echo "tomcatはHTTPステータス200で正常起動しました。"
    return 0
}

ここではwaitTomcatStarted.shという名前で保存します。

tomcatの起動スクリプト実行後、すぐにwaitTomcatStartedを実行して下さい。

するとtomcatの開始完了まで待ち、httpステータスによってreturnコードが返ります。

waitTomcatStartedの後にapacheの起動スクリプトを実行する等で使えるかと思います。

localhost:lib tree$ ./waitTomcatStarted.sh
curl: (7) couldn't connect to host
--- sleep 5 seconds [5 / 30]
curl: (7) couldn't connect to host
--- sleep 5 seconds [10 / 30]
curl: (7) couldn't connect to host
--- sleep 5 seconds [15 / 30]
curl: (7) couldn't connect to host
--- sleep 5 seconds [20 / 30]
curl: (7) couldn't connect to host
--- sleep 5 seconds [25 / 30]
curl: (7) couldn't connect to host
--- sleep 5 seconds [30 / 30]
curl: (7) couldn't connect to host
30秒待ちましたがtomcatが起動しませんでした。

couldn't connect to hostはtomcatが停止している事を意味します。

localhost:lib tree$ ./waitTomcatStarted.sh
tomcatはHTTPステータス200で正常起動しました。

curlはhttpステータスが返るまで待ってくれるようです。

監視自体は5秒毎に6回行いますが、ログが1回しか出ません。

200が返れば、アプリは既にオンラインで動作する状態にあります。

localhost:lib tree$ ./waitTomcatStarted.sh
tomcatはHTTPステータス200で正常起動しました。
localhost:lib tree$ ./waitTomcatStarted.sh
tomcatは起動しましたが、HTTPステータスが200ではありませんでした。
◯ 広告