Python编写memcached启动脚本
测试环境:CentOS 7
Python版本: 2.7
安装memcached:输入下面命令安装并用脚本测试
1
|
yum install
-
y memcached libmemcached libevent
|
测试方法:把脚本内容粘贴到rc.py文件中,shell下运行如果下命令:
1
|
python rc.py start
|
一、rc 脚本的start、stop、restart、status方法
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
#/usr/bin/env python
# -*- coding:utf-8 -*-
# @time :2018/1/12 19:11
# @Author :FengXiaoqing
# @file :rc.py
import
os
import
sys
from
subprocess
import
Popen,PIPE
class
Process(
object
):
'''memcached rc script'''
def
__init__(
self
,name,program,args,workdir):
self
.name
=
name
self
.program
=
program
self
.args
=
args
self
.workdir
=
workdir
def
_init(
self
):
'''/var/tmp/memcached'''
if
not
os.path.exists(
self
.workdir):
os.mkdir(
self
.workdir)
os.chdir(
self
.workdir)
def
_pidFile(
self
):
'''/var/tmp/memcached/memcached.pid'''
return
os.path.join(
self
.workdir,
"%s.pid"
%
self
.name)
def
_writhPid(
self
):
if
self
.pid:
with
open
(
self
._pidFile(),
'w'
) as fd:
fd.write(
str
(
self
.pid))
def
start(
self
):
pid
=
self
._getPid()
if
pid:
print
"%s is already runnig..."
%
self
.name
sys.exit()
self
._init()
cmd
=
self
.program
+
' '
+
self
.args
p
=
Popen(cmd,stdout
=
PIPE,shell
=
True
)
self
.pid
=
p.pid
self
._writhPid()
print
"%s start Sucessful.."
%
self
.name
def
_getPid(
self
):
p
=
Popen([
'pidof'
,
self
.name],stdout
=
PIPE)
pid
=
p.stdout.read().strip()
return
pid
def
stop(
self
):
pid
=
self
._getPid()
if
pid:
os.kill(
int
(pid),
15
)
if
os.path.exists(
self
._pidFile()):
os.remove(
self
._pidFile())
print
(
"%s is stopped ."
)
%
self
.name
def
restart(
self
):
self
.stop()
self
.start()
def
status(
self
):
pid
=
self
._getPid()
if
pid:
print
"%s is already running..."
%
self
.name
else
:
print
"%s is not running..."
%
self
.name
def
_help(
self
):
print
(
"Usage: %s {start|stop|status|restart}"
)
%
__file__
def
main():
name
=
'memcached'
prog
=
'/usr/bin/memcached'
args
=
'-u nobody -p 11211 -c 1024 -m 64'
wd
=
'/var/tmp/memcached'
pm
=
Process(name
=
name,
program
=
prog,
args
=
args,
workdir
=
wd)
try
:
cmd
=
sys.argv[
1
]
except
IndexError,e:
print
(
"Option error"
)
sys.exit()
if
cmd
=
=
'start'
:
pm.start()
elif
cmd
=
=
'stop'
:
pm.stop()
elif
cmd
=
=
'restart'
:
pm.restart()
elif
cmd
=
=
'status'
:
pm.status()
else
:
pm._help()
if
__name__
=
=
'__main__'
:
main()
|
二、rc脚本的(以daemon方式启动)
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
#/usr/bin/env python
# -*- coding:utf-8 -*-
# @time :2018/1/12 21:18
# @Author :FengXiaoqing
# @file :rc-d.py
import
os
import
sys
from
subprocess
import
Popen,PIPE
class
Process(
object
):
'''memcached rc script'''
args
=
{
'USER'
:
'memcached'
,
'PORT'
:
11211
,
'MAXCONN'
:
1024
,
'CACHESIZE'
:
64
,
'OPTIONS'
: ''}
def
__init__(
self
,name,program,workdir):
self
.name
=
name
self
.program
=
program
self
.workdir
=
workdir
def
_init(
self
):
'''/var/tmp/memcached'''
if
not
os.path.exists(
self
.workdir):
os.mkdir(
self
.workdir)
os.chdir(
self
.workdir)
def
_pidFile(
self
):
'''/var/tmp/memcached/memcached.pid'''
return
os.path.join(
self
.workdir,
"%s.pid"
%
self
.name)
def
_writhPid(
self
):
if
self
.pid:
with
open
(
self
._pidFile(),
'w'
) as fd:
fd.write(
str
(
self
.pid))
def
_readConf(
self
,f):
with
open
(f) as fd:
lines
=
fd.readlines()
return
dict
([i.strip().replace(
'"'
,'
').split('
=
')
for
i
in
lines])
def
_parseArgs(
self
):
conf
=
self
._readConf(
'/etc/sysconfig/memcached'
)
if
'USER'
in
conf:
self
.args[
'USER'
]
=
conf[
'USER'
]
if
'PORT'
in
conf:
self
.args[
'PORT'
]
=
conf[
'PORT'
]
if
'MAXCONN'
in
conf:
self
.args[
'MAXCONN'
]
=
conf[
'MAXCONN'
]
if
'CACHESIZE'
in
conf:
self
.args[
'CACHESIZE'
]
=
conf[
'CACHESIZE'
]
options
=
[
'-u'
,
self
.args[
'USER'
],
'-p'
,
self
.args[
'PORT'
],
'-m'
,
self
.args[
'MAXCONN'
],
'-c'
,
self
.args[
'CACHESIZE'
]]
return
options
def
start(
self
):
pid
=
self
._getPid()
if
pid:
print
"%s is already runnig..."
%
self
.name
sys.exit()
self
._init()
cmd
=
[
self
.program]
+
self
._parseArgs()
+
[
'-d'
,
'-P'
,
self
._pidFile()]
p
=
Popen(cmd,stdout
=
PIPE)
print
"%s start Sucessful.."
%
self
.name
def
_getPid(
self
):
p
=
Popen([
'pidof'
,
self
.name],stdout
=
PIPE)
pid
=
p.stdout.read().strip()
return
pid
def
stop(
self
):
pid
=
self
._getPid()
if
pid:
os.kill(
int
(pid),
15
)
if
os.path.exists(
self
._pidFile()):
os.remove(
self
._pidFile())
print
(
"%s is stopped ."
)
%
self
.name
def
restart(
self
):
self
.stop()
self
.start()
def
status(
self
):
pid
=
self
._getPid()
if
pid:
print
"%s is already running..."
%
self
.name
else
:
print
"%s is not running..."
%
self
.name
def
help
(
self
):
print
(
"Usage: %s {start|stop|status|restart}"
)
%
__file__
def
main():
name
=
'memcached'
prog
=
'/usr/bin/memcached'
wd
=
'/var/tmp/memcached'
pm
=
Process(name
=
name,
program
=
prog,
workdir
=
wd)
try
:
cmd
=
sys.argv[
1
]
except
IndexError,e:
print
(
"Option error"
)
sys.exit()
if
cmd
=
=
'start'
:
pm.start()
elif
cmd
=
=
'stop'
:
pm.stop()
elif
cmd
=
=
'restart'
:
pm.restart()
elif
cmd
=
=
'status'
:
pm.status()
else
:
pm.
help
()
if
__name__
=
=
'__main__'
:
main()
|
版权声明:原创作品,如需转载,请注明出处。否则将追究法律责任
本文转自 枫叶云 51CTO博客,原文链接:http://blog.51cto.com/fengyunshan911/2060427