-->
当前位置:首页 > DayDayUp > 正文内容

服务器命令执行,并调用钉钉机器人将返回结果发送至钉钉群

Luz3年前 (2022-04-02)DayDayUp4054

服务器老是崩,相关服务日志里也没有体现,想写个脚本定时将相关服务的信息发送过来方便排查

貌似钉钉机器人是可以直接发送文件的,没仔细研究,有兴趣的可以试试看

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任务计划,可以指定时间间隔运行一次,并将结果发送到钉钉,方便监控服务器状态

image.png

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。