最後に共有したのはシェルのバージョン: nginx 痛みのないサービス再起動を実現するための Tomcat クラスター構成チュートリアル
シェル構文の奇妙さは本当に耐えられないと感じていますが、スクリプトの処理とシェルとの対話における Java の本来の弱点により、ほとんどのコードでさまざまなスクリプトを実装するために最終的に Python を選択することになりました。 Tomcat を問題なく再起動するスクリプトを実装した後、デバッグの不便さに加えて、Python はスクリプトとしてシェルと対話するための素晴らしいツールであることがわかりました。
以下はスクリプトの実装です:
#encoding=utf8
インポート再
インポートOS
インポートコマンド
インポート時間
インポートurllib2
from urllib2インポートURLError
インポートソケット
tomcat_ps_name="apache-tomcat-6_"
flag=tomcat_ps_name+"d{4}"
ポート=["8080", "8081"]
nginx_path="/usr/local/nginx/"
nginx_vhost_c/vhost/"
nginx_bin_path=nginx_path+"sbin/nginx"
zuidaima_c>tomcat_path="/usr/local/apache- tomcat-_"
zuidaima_c>tomcat_startup_bin_path="/bin/startup.sh"
tomcat_shutdown_bin_path="/bin/shutdown.sh"
ps_grep_tomcat="ps -ef|grep "
zuidaima_domain="http://www.zuidaima. com"
kill_tomcat_pid=ps_grep_tomcat+tomcat_ps_name+"%s|awk '{print $2}'|。 /share.htm"
ret=-1
try: U Res = Urllib2.urlopen (url)
Ret = res.Code
Urlerror を除く、E:
Print "Request Url#"+URL+"ERROR" Return RET
# nginx の Tomcat ポート TDef Switch_nginx_conf (Running_tomcat_port, StOPED_TOMCAT_PORT ):
running_tomcat_c> if(not os.path.exists(running_tomcat_conf_name)):
return -1
stopd_tomcat_c> if(not os.path.exists(stoped_tomcat_conf_name+zuidaima_conf_) name_bak_suffix)):
return -2
os.rename(running_tomcat_conf_name , running_tomcat_conf_name+zuidaima_conf_name_bak_suffix)
os.rename(stoped_tomcat_conf_name+zuidaima_conf_name_bak_suffix, stop_tomcat_conf_name)
return 1
#指定されたポートでTomcatサービスを開始します
defstartup_tomcat(tomcat_port):
shutdown_tomcat (tomcat_port) )
Outputs=commands.getoutput(tomcat_path+tomcat_port+tomcat_startup_bin_path)
time.sleep(5) # 5 秒間スリープします
while(not is_tomcat_port_running(tomcat_port)):
print "start tomcat "+tomcat_port
time.sleep(5) # 5 秒間スリープ return 1
#指定されたポートの Tomcat サービスを停止します
def shutdown_tomcat(tomcat_port):
Commands.getoutput(kill_tomcat_pid%(tomcat_port))
while(is_tomcat_port_running(tomcat_port)):
print "stop tomcat "+tomcat_port
time.sleep(5) # 5秒スリープ
return 1
#Tomcatサービスを切り替える
def switch_tomcat(running_tomcat_port, stoped_tomcat_port):
startup_tomcat(stoped_tomcat_port)
shutdown_tomcat(running_tomcat_port)
return 1
#reload conf
def reload_nginx_conf( ):
コマンド .getoutput(nginx_bin_path+" -s reload ")
return 1
def start():
print "tomcat の切り替え開始"
running_tomcat_port=find_running_tomcat_port()
if running_tomcat_port==-1:
print "running tomcat & conf が無効です"
return
ports.remove(running_tomcat_port)
stoped_tomcat_port=ports[0]
print "Tomcat の "+running_tomcat_port+" から "+stoped_tomcat_port" への切り替えを開始します
ret=switch_tomcat(running_tomcat_port, stoped_tomcat_port)
if(ret !=1):
print "fail to switch_tomcat, RET: ", Ret" Return
Print "switch_nginx_conf の切り替えを開始"
Ret = switch_nginx_conf (running_tomcat_port_tomcat_port)
IF (RET! = 1):
Print "Fail to switch_nginx_conf , RET: ", Ret
Return
Print "nginx conf のリロード開始"
ret=reload_nginx_conf()
if(ret!=1):
print "fail to reload_nginx_conf,ret:", ret
return
print "finish to switch tomcat"
start()
写真と真実があります:
さらに、Alibaba Cloud サーバーに付属する Python のバージョンは Python 2.4.3 (#1、Jan) 9 2013, 06:49 :54)、スクリプトを作成する過程で、多くの構文は上位バージョンでのみ使用できるため、Python を学習する際にはバージョンの問題に注意を払う必要があります。
このバージョンの実装は、Python が高級言語であるため、ビジネス実装が非常に厳密です。たとえば、起動時に、誰が Tomcat を実行しているかを確認することができます。 tomcat のstartup.sh で urllib を再度実行し、ポートの share.htm をリクエストして、ブートが実際に成功したことを確認します。
楽しんでください。
上記では、Python 言語バージョンの nginx tomcat クラスター構成を紹介し、関連コンテンツを含めて、PHP チュートリアルに興味のある友人に役立つことを願っています。