天天看点

部署P2P扩容的脚本

这是一个python 2.7的脚本,内容如下:

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

<code>####################################################################################</code>

<code>#coding=utf-8                                      </code>

<code>#脚本用途:P2PRELAY扩容脚本                               </code>

<code>#编写时间:2016年8月24日                                </code>

<code>#脚本作者:乐橙运维组                                  </code>

<code>#!/usr/bin/env python</code>

<code>#载入模块</code>

<code>import</code> <code>commands</code>

<code>import</code> <code>os</code>

<code>import</code> <code>socket, fcntl, struct</code>

<code>import</code> <code>time</code>

<code>#制定启动看门狗的命令</code>

<code>dog_command=</code><code>'cd /opt/server &amp;&amp; nohup ./P2PRelayDog.py&gt;/dev/null &amp;'</code>

<code>#将server包复制到/opt目录下</code>

<code>os.system(</code><code>"cp -rf /share/yunwei/server /opt/server"</code><code>)</code>

<code>print </code><code>"/share/yunwei/server 已经全部复制到/opt文件夹下了。"</code>

<code>#获取当前主机的外网ip地址</code>

<code>def get_local_ip(ifname = </code><code>'eth1'</code><code>):</code>

<code>    </code><code>s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)</code>

<code>    </code><code>inet = fcntl.ioctl(s.fileno(), 0x8915, struct.pack(</code><code>'256s'</code><code>, ifname[:15]))</code>

<code>    </code><code>ret = socket.inet_ntoa(inet[20:24])</code>

<code>    </code><code>return</code> <code>ret</code>

<code>print </code><code>"此服务器的外网ip是"</code> <code>+ get_local_ip()</code>

<code>os.system(</code><code>"sed -i s/'RELAY_AGENT_IP ='/'RELAY_AGENT_IP = %s'/ /opt/server/P2PRelay.conf"</code><code>%(get_local_ip()))</code>

<code>print </code><code>"已经将外网ip地址添加到P2PRelay.conf文件里。"</code>

<code>#通过dog拉起P2PRelay服务</code>

<code>def P2P_start():</code>

<code>    </code><code>print </code><code>"现在将启动P2PRelay服务,并且会在20秒后显示P2P进程:"</code>

<code>    </code><code>os.system(dog_command)</code>

<code>    </code><code>time</code><code>.</code><code>sleep</code><code>(15)</code>

<code>    </code><code>print </code><code>"5..."</code>

<code>    </code><code>time</code><code>.</code><code>sleep</code><code>(1)</code>

<code>    </code><code>print </code><code>"4..."</code>

<code>    </code><code>print </code><code>"3..."</code>

<code>    </code><code>print </code><code>"2..."</code>

<code>    </code><code>print </code><code>"1!"</code>

<code>    </code><code>print </code><code>"P2P进程如下:"</code>

<code>    </code><code>os.system(</code><code>"ps -ef|grep cd|grep -v grep|awk '{print $2}'|xargs kill -9"</code><code>)</code>

<code>    </code><code>os.system(</code><code>"ps -ef | grep P2P"</code><code>)</code>

<code>if</code> <code>__name__ == </code><code>'__main__'</code><code>:</code>

<code>    </code><code>get_local_ip()</code>

<code>    </code><code>P2P_start()</code>

<code>print </code><code>"整个P2PRelay扩容脚本执行完毕,感谢您的使用。"</code>

每一步都是模块化编写,这里说一下这个脚本的背景和流程。

公司的公共挂载盘里就有P2P的安装文件夹,名字叫server,当购买到新设备之后,需要先把这个server文件夹复制到/opt目录下。

然后server文件夹里有一个P2PRelay.conf文件,平常时候需要手动的把服务器自己的公网IP地址填写到P2PRelay.conf里的RELAY_AGENT_IP = 后面,所以这里使用的sed -i的字符串替换方法。

但是这里要注意一下,因为公网ip是由一个函数得到的,这个函数在sed -i是不能当变量那样直接使用的,需要像脚本里写的那样,当然,如果

这么写的话更友好,这里使用了小小的正则表达式,以后即使RELAY_AGENT_IP后面有ip地址也会被正确的替换了。

这里有几点可以留着以后用:

1)linux 带变量替换字符串的方法:#sed -i s/$a/$b/ filename   或者 #sed -i ’s/’$a’/’$b’/’ filename   或者#eval sed -i ’s/$a/$b/’ filename。

2)python函数套用函数的两个方法

<a href="http://s4.51cto.com/wyfs02/M00/86/6F/wKiom1e-qq3x3MHeAACtEDEmFwM212.png" target="_blank"></a>

<a href="http://s3.51cto.com/wyfs02/M02/86/6F/wKiom1e-qq7DVqv6AADgFQWAwAs733.png" target="_blank"></a>

 本文转自 苏幕遮618 51CTO博客,原文链接:http://blog.51cto.com/chenx1242/1842435