# coding=utf-8
import subprocess
import urllib
import os
import time
from socket import *
def pid_tomcat():
child = subprocess.Popen(['pgrep', '-f', "tomcat"], stdout=subprocess.PIPE, shell=False)
response = child.communicate()[0]
tomcat = [int(pid) for pid in response.split()]
return tomcat
def Schedule(a,b,c):
'''''
a:已经下载的数据块
b:数据块的大小
c:远程文件的大小
'''
per = 100.0 * a * b / c
if per > 100 :
per = 100
print '%.2f%%' % per
if __name__ == "__main__":
tcpserver = socket(AF_INET, SOCK_STREAM)
# 本地信息绑定
tcpserver.bind(("192.168.128.57", 7788))
# 进行监听
tcpserver.listen(1)
# 客户端接受
while True:
print ("持续监听中...")
newsocket, clientaddr = tcpserver.accept()
recdata = newsocket.recv(1024)
recdata = eval(recdata)
print "接收到的数据为:" + str(recdata)
while True:
pid = pid_tomcat()
try:
tomcat_pid = pid[0]
os.system("kill -9 " + str(tomcat_pid))
except:
break
print("获取到的tomcat的pid为" + str(tomcat_pid))
# 下载新的war包
war_path = '/opt/Tomcat7_nlu/webapps/'
for key in recdata:
url = recdata[key]
war_name = (url.split("/")[-1]).split("-")[0]
print("在url地址中切出来的war包名字为:" + str(war_name))
if ".war" in war_name:
pass
else:
war_name += ".war"
will_del = war_name.split(".")[0]
print("在文件中切出来的关键字为:" + str(will_del))
# 删除掉旧的war包和文件夹
os.system("rm -rf /opt/Tomcat7_nlu/webapps/" + will_del + "*")
# 下载新的war包
download_path = war_path + war_name
urllib.urlretrieve(url, download_path, Schedule)
# 启动tomcat
os.system("/opt/Tomcat7_nlu/bin/startup.sh")
time.sleep(250)
# 操作完成后,给客户端返回信息,让客户端继续执行
newsocket.send("server has been restart!!!")
newsocket.close()