服务器命令执行,并调用钉钉机器人将返回结果发送至钉钉群
服务器老是崩,相关服务日志里也没有体现,想写个脚本定时将相关服务的信息发送过来方便排查
貌似钉钉机器人是可以直接发送文件的,没仔细研究,有兴趣的可以试试看
import paramiko import threading import requests import json import time def ding_send(text): headers={ "Content-Type": "application/json" } message={ "msgtype": "text", "text": { "content":text } } a=requests.post(url="xxxx",data=json.dumps(message),headers=headers) #此处填写钉钉机器人token print(a.text) def ssh2(ip,username,port,passwd,cmd): try: output='' ssh = paramiko.SSHClient() now=time.asctime( time.localtime(time.time()) ) ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(ip,port,username,passwd,timeout=5) for m in cmd: stdin, stdout, stderr = ssh.exec_command(m) out = stdout.readlines() outlen=len(out) i=1 for o in out: ding_send(now+'\n'+str(i)+"/"+str(outlen)+'\n'+o) i=i+1 time.sleep(5) ssh.close() #print(len(output)) #print(output) #for i in range(0,int(len(output)/19000)+1): # ding_send(now+'\n'+str(i+1)+"/"+str(int(len(output)/19000 )+1)+'\n'+output[i*19000:(i+1)*19000]) # time.sleep(1) #print(output) except : ding_send("server err!") print('err') if __name__=='__main__': cmd = ['ps -aux | grep java'] #此处填写要执行的命令 username = "root" #此处填写服务器ssh用户名 passwd = "****" #此处填写服务器ssh密码 threads = [] #需要多线程请自行写循环 ip='' #服务器ip port=2531 #服务器ssh端口 a=threading.Thread(target=ssh2,args=(ip,username,port,passwd,cmd)) a.start()
配合windows任务计划,可以指定时间间隔运行一次,并将结果发送到钉钉,方便监控服务器状态