import os, sys, time, datetime, shutil
import paramiko,hashlib,threading
class Update(object):
def __init__(self):
self.Twip = []
self.Twtp = []
self.menu = {
"project": {
"SMS_PLAT": ["192.168.1.240:/usr/java/tomcat71/webapps/"],
"AppletPay": ["192.168.1.240:/usr/java/tomcat79/webapps/"],
"C1_FLEX": ["192.168.1.238:/usr/java/tomcat72/webapps/", "192.168.150.238:/usr/java/tomcat6/webapps/"],
"P1_CENTER":["192.168.150.238:/usr/java/tomcat6/webapps/"],
"A1_BILL":["192.168.1.234:/usr/java/tomcat72/webapps/","192.168.1.236:/usr/java/tomcat72/webapps/"],
"L2_PLAT":["192.168.1.240:/usr/java/tomcat76/webapps/"]
}
}
def Cmd(self, HS, file, path, hp):
HOST, PORT = HS, 22
spfile = '/home/bruce/tmp/' + file
bpfile = '/home/bruce/back/' + file
transport = paramiko.Transport((HOST, PORT))
key = paramiko.RSAKey.from_private_key_file("/root/.ssh/id_rsa")
transport.connect(username='root', pkey=key)
sftp = paramiko.SFTPClient.from_transport(transport)
try:
sftp.get(hp + path + '/' +file, bpfile+'.bak')
print("%s\n================备份成功==================" % (path + '/' + file))
except FileNotFoundError as e:
print('\n',e,'远程主机没有此文件\n')
try:
sftp.put(spfile, hp + path + '/' + file)
print("%s\n================升级成功==================" % (path + '/' + file))
except FileNotFoundError as e:
print('\n',e,'远程路径不存在\n')
transport.close()
def Readfile(self, filename):
m = Update()
with open(filename, 'r') as f:
for line in f:
if len(line.strip()) != 0:
line = line.strip().split('\\')
src_path = '/'.join(line[0:-1])
loadfile = line.pop()
if line[0] in self.menu["project"]:
th = []
for i in self.menu["project"][line[0]]:
ip = i.split(':')[0]
self.Twip.append(i.split(':')[0])
sp = i.split(':')[1]
Tomcat = sp.split('/')[3]
self.Twtp.append(sp.split('/')[3])
print(i)
t1 = threading.Thread(target=m.Cmd,args=(ip,loadfile,src_path,sp,))
t1.start()
th.append(t1)
for h in th:
h.join()
elif not os.path.isfile('/home/bruce/tmp/' + loadfile):
print("%s 文件不存在" % loadfile)
exit()
else:
TH = []
for t, p in zip(set(self.Twip), self.Twtp):
t2=threading.Thread(target=m.Retomcat,args=(t, p,))
t2.start()
TH.append(t2)
for p in TH:
p.join()
def Retomcat(self, HS, TM):
ssh = paramiko.SSHClient()
HOST, PORT = HS, 22
msg = 'sh /etc/init.d/tomcatd ' + TM + ' restart'
key = paramiko.RSAKey.from_private_key_file("/root/.ssh/id_rsa")
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname=HOST, port=22, username="root", pkey=key)
stdin, stdout, stderr = ssh.exec_command(msg)
res, err = stdout.read(), stderr.read()
rest = res if res else err
print(HOST)
print(rest.decode())
ssh.close()
if __name__ == '__main__':
u = Update()
u.Readfile('user_file')