公司的生產線上有200多臺服務器每天都在高速運行,每天上班之后的第一件事情,就是要檢查這200多臺機器的服務是否正常,像這種每天需要重復做的事情,我喜歡通過自動化腳本來解決,而Python則為我提供了一種方便而簡潔的解決方法!!!
一:收集所有服務器的ip地址和業務端口,并保存在ip-port.txt的文件中
由于涉及到生產的ip地址和端口,這里我就用其它非生產的ip地址做演示,ip地址和端口之間通過":"冒號來隔開
私信小編 01 技術問題 視頻源碼 PDF一切都有!~
二:定義一個函數,先將ip-port.txt文件轉成一個列表
def readfile(): ipportlist = [] #定義一個空列表 file = open('ip-port.txt','r',encoding='utf-8') rfile = file.readlines() #讀取文件中的內容,得到一個列表,每一行就是一個元素 for n in rfile: n1 = n.replace('n','') #去掉元素中的換行符 ipportlist.Append(n1) return ipportlist
三:定義一個函數,檢查業務端口是否正常
def serverport(host,port): #定義一個函數,傳入2個變量 sk = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #定義一個socket的ipv4會話 sk.settimeout(2) #定義2秒鐘超時 try: sk.connect((host,port)) print('succ:' + host) with open('succ.txt','a',encoding='utf-8') as file: file.write(host + ':' + str(port) + 'n') except: print('fail:' + host) with open('fail.txt','a',encoding='utf-8') as file: file.write(host + ':' + str(port) + 'n')
四:將兩個函數結合起來,得到最終的結果
if __name__ == '__main__': #程序入口 for s in readfile(): #獲取文件中的每一個ip和端口 s1 = re.split(':',s) #以冒號作為分隔符,將ip和端口分離,得到一個列表 ip = s1[0] port = int(s1[1]) serverport(ip,port) #函數傳參,并檢測
代碼執行完之后,不僅會將結果輸出在顯示屏上面,還會生成succ.txt和fail.txt兩個文件
總結:
- 喜歡用自動化運維的思想去處理工作當中的問題
- 學以致用,寫代碼就是要經常練習