1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
#脚本用途:检测Activemq集群的端口监听情况及其队列通畅情况
#!/usr/bin/env python
#coding=utf-8
import
paramiko
import
time
import
sys
import
stomp
Aip = (
"第一台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端口的脚本一模一样,就是里面的命令改一下,所以在正常情况下启动本脚本的效果就是这样的:
或者是:
本文转自 苏幕遮618 51CTO博客,原文链接:http://blog.51cto.com/chenx1242/1884415