Python编写memcached启动脚本代码实例
memcached是一套分布式的高速缓存系统,由LiveJournal的BradFitzpatrick开发,但被许多网站使用。这是一套开放源代码软件,以BSDlicense授权发布。
memcached缺乏认证以及安全管制,这代表应该将memcached服务器放置在防火墙后。
memcached的API使用三十二比特的循环冗余校验(CRC-32)计算键值后,将数据分散在不同的机器上。当表格满了以后,接下来新增的数据会以LRU机制替换掉。由于memcached通常只是当作缓存系统使用,所以使用memcached的应用程序在写回较慢的系统时(像是后端的数据库)需要额外的代码更新memcached内的数据。
memcached作为缓存文件服务,默认是操作系统里面是可以直接yum-yinstallmemcached进行安装的。
/etc/init.d/memcached是属于系统shell编写的管理脚本,下面这个脚本是python脚本编写出来的memcached管理脚本,和shell编写的脚本实现的效果一样。
代码如下
#!/usr/bin/python
importsys
importos
fromsubprocessimportPopen,PIPE
classProcess(object):
'''memachedrcscript'''
args={'USER':'memcached',
'PORT':11211,
'MAXCONN':1024,
'CACHESIZE':64,
'OPTION':''}
def__init__(self,name,program,workdir):
self.name=name
self.program=program
self.workdir=workdir
def_init(self):
'''/var/tmp/memcached'''
ifnotos.path.exists(self.workdir):
os.mkdir(self.workdir)
os.chdir(self.workdir)
def_pidFile(self):
'''/var/tmp/memcached/memcached.pid'''
returnos.path.join(self.workdir,"%s.pid"%self.name)
def_writePid(self):
ifself.pid:
withopen(self._pidFile(),'w')asfd:
fd.write(str(self.pid))
def_readConf(self,f):
withopen(f)asfd:
lines=fd.readlines()
returndict([i.strip().replace('"','').split('=')foriinlines])
def_parseArgs(self):
conf=self._readConf('/etc/sysconfig/memcached')
if'USER'inconf:
self.args['USER']=conf['USER']
if'PORT'inconf:
self.args['PORT']=conf['PORT']
if'MAXCONN'inconf:
self.args['MAXCONN']=conf['MAXCONN']
if'CACHESIZE'inconf:
self.args['CACHESIZE']=conf['CACHESIZE']
options=['-u',self.args['USER'],
'-p',self.args['PORT'],
'-m',self.args['CACHESIZE'],
'-c',self.args['MAXCONN']]
os.system("chown%s%s"%(self.args['USER'],self.workdir))
returnoptions
defstart(self):
pid=self._getPid()
ifpid:
print"%sisrunning..."%self.name
sys.exit()
self._init()
cmd=[self.program]+self._parseArgs()+['-d','-P',self._pidFile()]
p=Popen(cmd,stdout=PIPE)
#self.pid=p.pid
#self._writePid()
print"%sstartSucessful\t\t[OK]"%self.name
def_getPid(self):
p=Popen(['pidof',self.name],stdout=PIPE)
pid=p.stdout.read().strip()
returnpid
defstop(self):
pid=self._getPid()
ifpid:
os.kill(int(pid),15)
ifos.path.exists(self._pidFile()):
os.remove(self._pidFile())
print"%sisstopped\t\t\t[OK]"%self.name
defrestart(self):
self.stop()
self.start()
defstatus(self):
pid=self._getPid()
ifpid:
print"%sisalreadyrunning"%self.name
else:
print"%sisnotrunning"%self.name
defhelp(self):
print"Usage:%s{start|stop|status|restart|}"%__file__
defmain():
name='memcached'
prog='/usr/bin/memcached'
args='-unobody-p11211-c1024-m64'
wd='/var/tmp/memcached'
pm=Process(name=name,
program=prog,
workdir=wd)
try:
cmd=sys.argv[1]
exceptIndexError,e:
print"Optionerror"
sys.exit()
ifcmd=='start':
pm.start()
elifcmd=='stop':
pm.stop()
elifcmd=='restart':
pm.restart()
elifcmd=='status':
pm.status()
else:
pm.help()
if__name__=='__main__':
main()
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。