importparamikoimportconfigparserimportreimportosimporttimeimportdatetime
config=configparser.ConfigParser()
config.read('conf.ini')defmain():print("输入命令: jobtype date -env 例如: A 2018-09-08 -d\n"
"1.jobtype:A,B\n"
"2.date:日期格式yyyy-mm-dd 如:2018-08-04\n"
"3.env:d(dev),t(test)\n\n")
code_date= ['A','B','-d','-t']whileTrue:
job_code= input('请输入执行定时任务命令:')
job_code=job_code.lower()
job_codes=job_code.split()
tmp= [val for val in job_codes if val incode_date]if len(tmp) != 2:print('任务类型或环境参数有误,请重新输入')else:#定时任务类型
if job_code.find('A') > -1:
job_type= '执行A任务命令'
elif job_code.find('B') > -1:
job_type= '执行B任务命令'
elif job_code.find('C') > -1:
job_type= '执行C任务命令'
#执行环境
if job_code.find('-d') > -1:
env_code= 'dev'
elif job_code.find('-t') > -1:
env_code= 'test'
#获取日期
date_string = re.findall(".* (.*) .*",job_code)
job_date= "".join(date_string)#获取环境配置
ip = config.get(env_code,"ip")
username= config.get(env_code,"username")
password= config.get(env_code,"password")#连接SSH
try:
ssh=paramiko.SSHClient()
key=paramiko.AutoAddPolicy()
ssh.set_missing_host_key_policy(key)
ssh.connect(ip,22, username, password ,timeout=5)#获取当前时间
#now_time=datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
#执行Job命令
job_command =job_type+job_date
stdin, stdout, stderr=ssh.exec_command(job_command)print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') + "开始执行")
ssh.close()except:print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') + "定时任务执行失败")#获取日志文件
t = paramiko.Transport((ip, 22))
t.connect(username=username, password=password)
sftp=paramiko.SFTPClient.from_transport(t)try:
result=0for i in range(1, 20):
time.sleep(60)
sftp.get('os.getcwd()+'/\\console.log')
log_content = open('console.log', 'r', encoding='UTF-8')
log_string=log_content.read()
log_content.close()if "任务开始时间" inlog_string:print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') + "执行中...")if "执行完毕时间" inlog_string:
time.sleep(5)print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') + "执行完毕")
result= 1
break
if result ==0:print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') + "执行失败")except:print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') + "获取日志失败,可能未执行成功")if __name__ == "__main__":
main()