#!/usr/bin/env python
# -*- coding: utf-8 -*-
import threading, signal
import time,Queue
import pexpect,re
#macro
IP = 'IP'
USER = 'USER'
PASS = 'PASS'
DATAPATH= 'DATAPATH'
LOGPATH = 'LOGPATH'
#global variable
gDefaultUser = 'root'
gDefaultPass = 'cgsl123'
gDefaultDatapath = '/uds/filestore'
gDefaultLogpath = '/uds/filestore'
gHostList = [
{HOST:'127.0.0.1', USER:'root', PASS:''},
{HOST:'127.0.0.1' },
]
gHostQueue = Queue.Queue()
gIsExit = False
def sshcmd(ip, user, passwd, cmd):
ret = -1
out = ''
ssh = pexpect.spawn('ssh %s@%s "%s"' % (ip, user, cmd))
try:
i = ssh.expect(['password: ', '(yes/no)?'], timeout=5)
if i == 0 :
ssh.sendline(passwd)
elif i == 1:
ssh.sendline('yes\n')
i = ssh.expect(['password: ', '#'], timeout=5)
if i == 0 :
ssh.sendline(passwd)
ssh.sendline(cmd)
out = ssh.read()
print r
ret = 0
except pexpect.EOF:
print "EOF"
ssh.close()
ret = -1
except pexpect.TIMEOUT:
print "TIMEOUT"
ssh.close()
ret = -2
return ret, out
def GetDsaList(ip, user, passwd, datapath):
ret,out = sshcmd(ip, user, passwd, 'ls -l %s |grep DSA' %datapath)
if ret <> 0:
print '%s get dsa list failed' %ip
return []
return re.findall('DSA(\d*)', out)
def ChangeControlFile(ip, user, passwd, datapath, logpath)
dsalist = GetDsaList(ip, user, passwd, datapath)
if len(dsalist) == 0:
return
sshcmd(ip, user, passwd, 'mkdir -p /tmp/filesql')
upload('filesql.out', ip, user, passwd, '/tmp/filesql')
upload('filesql.old', ip, user, passwd, '/tmp/filesql')
upload('trans.sh', ip, user, passwd, '/tmp/filesql')
for dsaid in dsalist:
sshcmd(ip, user, passwd, 'sh trans.sh %s' %dsaid)
class MyThread(threading.Thread):
def run(self):
isEnd = False
while isEnd == False and gIsExit == False:
try:
host = gHostQueue.get(False)
except:
isEnd = True
ChangeControlFile(
host.get(IP),
host.get(USER, gDefaultUser),
host.get(PASS, gDefaultPass),
host.get(DATAPATH, gDefaultDatapath),
host.get(LOGPATH, gDefaultLogpath)
)
def main()
threads = []
for host in gHostList:
gHostQueue.put(host)
for i in range(100):
t = MyThread()
t.start()
threads.append(t)
for t in threads:
t.join()
def handler(signum, frame):
global gIsExit
gIsExit = True
print "receive a signal %d, is_exit = %d"%(signum, gIsExit)
if __name__=="__main__":
signal.signal(signal.SIGINT, handler)
signal.signal(signal.SIGTERM, handler)
s=time.time()
main()
e=time.time()
print "total used %f s" %(e-s)