大家好,又见面了,我是全栈君。
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账号...