大家好,又见面了,我是全栈君。
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()
|
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/108008.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...