1. 程式人生 > >登陸服務期執行命令並根據日誌判斷是否執行成功

登陸服務期執行命令並根據日誌判斷是否執行成功

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 if
val 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任務命令 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 = 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

登陸服務期執行命令並根據日誌判斷是否執行成功