这是一个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 && nohup ./P2PRelayDog.py>/dev/null &'</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