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
         =  Popen(cmd,stdout = PIPE,shell = True )
         self .pid  =  p.pid
         self ._writhPid()
         print  "%s start Sucessful.."  %  self .name
 
     def  _getPid( self ):
         =  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  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()]
         =  Popen(cmd,stdout = PIPE)
         print  "%s start Sucessful.."  %  self .name
     def  _getPid( self ):
         =  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()