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
<code>#腳本用途:檢測Activemq叢集的端口監聽情況及其隊列通暢情況</code>
<code>#!/usr/bin/env python</code>
<code>#coding=utf-8 </code>
<code>import</code> <code>paramiko</code>
<code>import</code> <code>time</code>
<code>import</code> <code>sys</code>
<code>import</code> <code>stomp</code>
<code>Aip = (</code><code>"第一台mq伺服器"</code><code>)</code>
<code>Bip = (</code><code>"第二台mq伺服器"</code><code>)</code>
<code>Cip = (</code><code>"第三台mq伺服器"</code><code>)</code>
<code>list = []</code>
<code>def Checknetstat():</code>
<code> </code><code>for</code> <code>i </code><code>in</code> <code>(Aip,Bip,Cip):</code>
<code> </code><code>hostname</code><code>=i</code>
<code> </code><code>username=</code><code>"root"</code>
<code> </code><code>password=</code><code>"伺服器密碼"</code> <code>#這裡預設三台伺服器的密碼是一樣的</code>
<code> </code><code>paramiko.util.log_to_file(</code><code>"syslogin.log"</code><code>)</code>
<code> </code><code>ssh</code><code>=paramiko.SSHClient()</code>
<code> </code><code>ssh</code><code>.load_system_host_keys()</code>
<code> </code><code>ssh</code><code>.connect(</code><code>hostname</code><code>=</code><code>hostname</code><code>,username=username,password=password)</code>
<code> </code><code>stdin,stdout,stderr=</code><code>ssh</code><code>.exec_command(</code><code>"netstat -ntpl | grep 61613 | wc -l"</code><code>)</code>
<code> </code><code>word=str(stdout.</code><code>read</code><code>().strip(</code><code>'\n'</code><code>)) </code><code>#考慮一下這裡為什麼會有一個strip?</code>
<code> </code><code>list.append(word) </code><code>#把for循環的結果變成一個list</code>
<code> </code><code>ssh</code><code>.close()</code>
<code> </code><code>print list</code>
<code> </code>
<code>def GoListen(xip):</code>
<code> </code><code>class MyListener(object):</code>
<code> </code><code>def on_error(self, headers, message):</code>
<code> </code><code>print(</code><code>'received an error %s'</code> <code>% message)</code>
<code> </code><code>def on_message(self, headers, message):</code>
<code> </code><code>print(</code><code>'received a message %s'</code> <code>% message)</code>
<code> </code><code>conn = stomp.Connection([(xip,61613)])</code>
<code> </code><code>conn.set_listener(</code><code>''</code><code>, MyListener())</code>
<code> </code><code>conn.start()</code>
<code> </code><code>conn.connect(</code><code>'mq的賬戶'</code><code>,</code><code>'mq的密碼'</code><code>)</code>
<code> </code><code>conn.subscribe(destination=</code><code>'/queue/隊列名稱'</code><code>, </code><code>id</code><code>=1, ack=</code><code>'auto'</code><code>)</code>
<code> </code><code>conn.send(body=</code><code>'具體的消息内容'</code><code>, destination=</code><code>'/queue/隊列名稱'</code><code>)</code>
<code> </code><code>time</code><code>.</code><code>sleep</code><code>(2)</code>
<code> </code><code>conn.disconnect()</code>
<code>def Remotecommand():</code>
<code> </code><code>if</code> <code>list == [</code><code>'1'</code><code>, </code><code>'0'</code><code>, </code><code>'0'</code><code>]:</code>
<code> </code><code>print (</code><code>"第一台機器的61613端口處于監聽狀态,現在嘗試往裡面發送消息..."</code><code>)</code>
<code> </code><code>try:</code>
<code> </code><code>GoListen(Aip)</code>
<code> </code><code>except stomp.exception.ConnectFailedException:</code>
<code> </code><code>print (</code><code>"發送資訊失敗,請重新開機Activemq程序..."</code><code>)</code>
<code> </code><code>elif</code> <code>list == [</code><code>'0'</code><code>, </code><code>'1'</code><code>, </code><code>'0'</code><code>]:</code>
<code> </code><code>print (</code><code>"第二台機器的61613端口處于監聽狀态,現在嘗試往裡面發送消息..."</code><code>)</code>
<code> </code><code>GoListen(Bip)</code>
<code> </code><code>elif</code> <code>list == [</code><code>'0'</code><code>, </code><code>'0'</code><code>, </code><code>'1'</code><code>]:</code>
<code> </code><code>print (</code><code>"第三台機器的61613端口處于監聽狀态,現在嘗試往裡面發送消息..."</code><code>)</code>
<code> </code><code>GoLinten(Cip)</code>
<code> </code><code>else</code><code>:</code>
<code> </code><code>print (</code><code>"activemq的61613端口處于異常,現在重新開機這三台mq..."</code><code>)</code>
<code> </code><code>pass </code><code>#這裡可以單獨寫一個遠端activemq重新開機的腳本</code>
<code> </code>
<code>if</code> <code>__name__ == </code><code>"__main__"</code><code>:</code>
<code> </code><code>Checknetstat()</code>
<code> </code><code>Remotecommand()</code>
<code>print(</code><code>"整個腳本執行結束,感謝您的使用!"</code><code>)</code>
基本上來說,整個腳本的結構就是這樣的,裡面漢字的内容可以依照實際情況填寫進去。
遠端重新開機activemq腳本這裡就不寫了,跟遠端查詢61613端口的腳本一模一樣,就是裡面的指令改一下,是以在正常情況下啟動本腳本的效果就是這樣的:
<a href="http://s5.51cto.com/wyfs02/M02/8B/CC/wKiom1hY_Q3xIV3jAAA-X3gEd9Y997.png" target="_blank"></a>
或者是:
<a href="http://s4.51cto.com/wyfs02/M00/8B/DF/wKioL1hbi37Te7BGAAB3mkNelF4640.png" target="_blank"></a>
本文轉自 蘇幕遮618 51CTO部落格,原文連結:http://blog.51cto.com/chenx1242/1884415