登陸服務期執行命令並根據日誌判斷是否執行成功
阿新 • • 發佈:2019-03-30
pcl %d lee 執行c 是否 時間 nec 格式 inpu
項目中需要登錄到遠程服務器並手動執行任務,根據需求寫的腳本,做個筆記。Python3.7環境下的
import paramiko import configparser import re import os import time import datetime config = configparser.ConfigParser() config.read(‘conf.ini‘) def main(): 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‘] while True: job_code = input(‘請輸入執行定時任務命令:‘) job_code = job_code.lower() job_codes = job_code.split() tmp = [val for val in job_codes ifval in code_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任務命令‘ elifjob_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 = 0 for 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 "任務開始時間" in log_string: print(datetime.datetime.now().strftime(‘%Y-%m-%d %H:%M:%S‘) + " 執行中...") if "執行完畢時間" in log_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()
conf.ini文件如下:
[dev]
ip=192.168.51.1
username=xxx
password=xxxx
[test]
ip=192.168.49.8
username=yyy
password=yyyy
登陸服務期執行命令並根據日誌判斷是否執行成功