読者です 読者をやめる 読者になる 読者になる

文系プログラマによるTIPSブログ

文系プログラマ脳の私が開発現場で学んだ事やプログラミングのTIPSをまとめています。

【デプロイ】Fabricを学ぶ:Vol.02:tomcatの起動完了を監視する【python】

python fabric デプロイ

f:id:treeapps:20140204231209p:plain
Fabric連載第2回です。
Vol01で結構沢山書いてしまったので書く事がなくなりつつあるので、役に立つかもしれないタスク等を公開してみようとおもいます。

今回のお題は tomcatの起動完了を監視する です。

では早速いってみましょう。

Fabricでtomcatの起動完了を待つ

まずはタスクのサンプルです。

#coding:utf-8
import os, time
from fabric.api import env, run, sudo, local, put, cd
from fabric.decorators import task
from fabric.utils import abort
from fabric.colors import red, green, yellow, cyan

env.warn_only = True

@task
def monitorTomcatStarted():
    INTERVAL = 1
    RETRY = 60
    count = 1
    print cyan('tomcatの起動を{0}秒間隔で{1}回まで監視します。'.format(INTERVAL, RETRY))
    while 1:
        if count == RETRY:
            print red('[{0}回目] tomcatはHTTPステータス200で起動しませんでした。'.format(count))
            break
        result = run('/usr/bin/curl --silent --show-error --connect-timeout 1 -I \'http://localhost:8080\' | egrep \'HTTP/1.1\' | awk \'{print $2}\'', quiet = True)
        if result.isdigit():
            if int(result) == 200:
                print green('[{0}回目] tomcatはHTTPステータス200で起動しました。'.format(count))
                break
            print yellow('[{0}回目] フロントのHTTPステータスコードは{1}です。起動を待ちます・・'.format(count, result))
        else:
            print yellow('[{0}回目] tomcatに接続できません。message = {1}'.format(count, result))
        count += 1
        time.sleep(int(INTERVAL))

これを実行すると、以下のようになります。
f:id:treeapps:20140204225826p:plain
colorメソッドで視覚的に状況を把握できるようにしています。

これで起動が完了したかどうか、HTTPステータスコードが200かどうかを判定する事ができます。
何秒監視するかも設定できるようにしました!!

おまけ

Fabricと全く関係無いですが、bannerコマンドについて紹介します。
実行すると以下のように標準出力する事ができます。

$ banner deploy

######   #######  ######   #        #######  #     #
#     #  #        #     #  #        #     #   #   #
#     #  #        #     #  #        #     #    # #
#     #  #####    ######   #        #     #     #
#     #  #        #        #        #     #     #
#     #  #        #        #        #     #     #
######   #######  #        #######  #######     #

$

アスキーアートのような出力が可能になるコマンドです。
Macの場合は縦に横向きに出力されてしまいますが、CentOSの場合は↑のようになります。
CentOSの場合は標準でインストールされていないので、makeしてインストールしてみましょう。

まず以下のページを開きます。
Cedar Solutions - Utilities

次に、↓のリンク部分からtarをダウンロードします。
banner (source):

以降は以下のコマンドでインストールできます。

wget http://software.cedar-solutions.com/ftp/software/banner-1.3.2.tar.gz
tar zxvf banner-1.3.2.tar.gz
cd banner-1.3.2
./configure
make
sudo make install

これで後は「banner hoge」などと入力するとAAみたいのが出力できます。

注意点として日本語に未対応な点です。
あと、長い文字列を入力すると改行されてしまうので注意して下さい。




Pythonスタートブック

Pythonスタートブック

Railsデプロイ

Railsデプロイ

Jenkins実践入門 ?ビルド・テスト・デプロイを自動化する技術 (WEB+DB PRESS plus)

Jenkins実践入門 ?ビルド・テスト・デプロイを自動化する技術 (WEB+DB PRESS plus)