天天看點

Activemq判斷隊列存活腳本(二)

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

繼續閱讀