这是一个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
|
####################################################################################
#coding=utf-8
#脚本用途:P2PRELAY扩容脚本
#编写时间:2016年8月24日
#脚本作者:乐橙运维组
####################################################################################
#!/usr/bin/env python
#载入模块
import
commands
import
os
import
socket, fcntl, struct
import
time
#制定启动看门狗的命令
dog_command=
'cd /opt/server && nohup ./P2PRelayDog.py>/dev/null &'
#将server包复制到/opt目录下
os.system(
"cp -rf /share/yunwei/server /opt/server"
)
print
"/share/yunwei/server 已经全部复制到/opt文件夹下了。"
#获取当前主机的外网ip地址
def get_local_ip(ifname =
'eth1'
):
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
inet = fcntl.ioctl(s.fileno(), 0x8915, struct.pack(
'256s'
, ifname[:15]))
ret = socket.inet_ntoa(inet[20:24])
return
ret
print
"此服务器的外网ip是"
+ get_local_ip()
os.system(
"sed -i s/'RELAY_AGENT_IP ='/'RELAY_AGENT_IP = %s'/ /opt/server/P2PRelay.conf"
%(get_local_ip()))
print
"已经将外网ip地址添加到P2PRelay.conf文件里。"
#通过dog拉起P2PRelay服务
def P2P_start():
print
"现在将启动P2PRelay服务,并且会在20秒后显示P2P进程:"
os.system(dog_command)
time
.
sleep
(15)
print
"5..."
time
.
sleep
(1)
print
"4..."
time
.
sleep
(1)
print
"3..."
time
.
sleep
(1)
print
"2..."
time
.
sleep
(1)
print
"1!"
time
.
sleep
(1)
print
"P2P进程如下:"
os.system(
"ps -ef|grep cd|grep -v grep|awk '{print $2}'|xargs kill -9"
)
os.system(
"ps -ef | grep P2P"
)
if
__name__ ==
'__main__'
:
get_local_ip()
P2P_start()
print
"整个P2PRelay扩容脚本执行完毕,感谢您的使用。"
|
每一步都是模块化编写,这里说一下这个脚本的背景和流程。
公司的公共挂载盘里就有P2P的安装文件夹,名字叫server,当购买到新设备之后,需要先把这个server文件夹复制到/opt目录下。
然后server文件夹里有一个P2PRelay.conf文件,平常时候需要手动的把服务器自己的公网IP地址填写到P2PRelay.conf里的RELAY_AGENT_IP = 后面,所以这里使用的sed -i的字符串替换方法。
但是这里要注意一下,因为公网ip是由一个函数得到的,这个函数在sed -i是不能当变量那样直接使用的,需要像脚本里写的那样,当然,如果
os.system("sed -i s/‘RELAY_AGENT_IP.*‘/‘RELAY_AGENT_IP = ‘ {}/ relay.conf".format(get_local_ip()))
这么写的话更友好,这里使用了小小的正则表达式,以后即使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函数套用函数的两个方法
本文转自 苏幕遮618 51CTO博客,原文链接:http://blog.51cto.com/chenx1242/1842435