#脚本用途:检测Activemq集群的端口监听情况及其队列通畅情况#!/usr/bin/env python#coding=utf-8 import paramikoimport timeimport sysimport stompAip = ("第一台mq服务器")Bip = ("第二台mq服务器")Cip = ("第三台mq服务器")list = []def Checknetstat(): for i in (Aip,Bip,Cip): hostname=i username="root" password="服务器密码" #这里默认三台服务器的密码是一样的 paramiko.util.log_to_file("syslogin.log") ssh=paramiko.SSHClient() ssh.load_system_host_keys() ssh.connect(hostname=hostname,username=username,password=password) stdin,stdout,stderr=ssh.exec_command("netstat -ntpl | grep 61613 | wc -l") word=str(stdout.read().strip('\n')) #考虑一下这里为什么会有一个strip? list.append(word) #把for循环的结果变成一个list ssh.close() print list def GoListen(xip): class MyListener(object): def on_error(self, headers, message): print('received an error %s' % message) def on_message(self, headers, message): print('received a message %s' % message) conn = stomp.Connection([(xip,61613)]) conn.set_listener('', MyListener()) conn.start() conn.connect('mq的账户','mq的密码') conn.subscribe(destination='/queue/队列名称', id=1, ack='auto') conn.send(body='具体的消息内容', destination='/queue/队列名称') time.sleep(2) conn.disconnect() def Remotecommand(): if list == ['1', '0', '0']: print ("第一台机器的61613端口处于监听状态,现在尝试往里面发送消息...") try: GoListen(Aip) except stomp.exception.ConnectFailedException: print ("发送信息失败,请重启Activemq进程...") elif list == ['0', '1', '0']: print ("第二台机器的61613端口处于监听状态,现在尝试往里面发送消息...") try: GoListen(Bip) except stomp.exception.ConnectFailedException: print ("发送信息失败,请重启Activemq进程...") elif list == ['0', '0', '1']: print ("第三台机器的61613端口处于监听状态,现在尝试往里面发送消息...") try: GoLinten(Cip) except stomp.exception.ConnectFailedException: print ("发送信息失败,请重启Activemq进程...") else: print ("activemq的61613端口处于异常,现在重启这三台mq...") pass #这里可以单独写一个远程activemq重启的脚本 if __name__ == "__main__": Checknetstat() Remotecommand()print("整个脚本执行结束,感谢您的使用!")
基本上来说,整个脚本的结构就是这样的,里面汉字的内容可以依照实际情况填写进去。
远程重启activemq脚本这里就不写了,跟远程查询61613端口的脚本一模一样,就是里面的命令改一下,所以在正常情况下启动本脚本的效果就是这样的:
或者是: