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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。