Python編寫memcached啟動(dòng)腳本代碼實(shí)例
memcached是一套分布式的高速緩存系統(tǒng),由LiveJournal的Brad Fitzpatrick開(kāi)發(fā),但被許多網(wǎng)站使用。這是一套開(kāi)放源代碼軟件,以BSD license授權(quán)發(fā)布。
memcached缺乏認(rèn)證以及安全管制,這代表應(yīng)該將memcached服務(wù)器放置在防火墻后。
memcached的API使用三十二比特的循環(huán)冗余校驗(yàn)(CRC-32)計(jì)算鍵值后,將數(shù)據(jù)分散在不同的機(jī)器上。當(dāng)表格滿了以后,接下來(lái)新增的數(shù)據(jù)會(huì)以LRU機(jī)制替換掉。由于memcached通常只是當(dāng)作緩存系統(tǒng)使用,所以使用memcached的應(yīng)用程序在寫回較慢的系統(tǒng)時(shí)(像是后端的數(shù)據(jù)庫(kù))需要額外的代碼更新memcached內(nèi)的數(shù)據(jù)。
memcached作為緩存文件服務(wù),默認(rèn)是操作系統(tǒng)里面是可以直接yum -y install memcached進(jìn)行安裝的。
/etc/init.d/memcached 是屬于系統(tǒng)shell編寫的管理腳本,下面這個(gè)腳本是python腳本編寫出來(lái)的memcached管理腳本,和shell編寫的腳本實(shí)現(xiàn)的效果一樣。
代碼如下
#!/usr/bin/python
import sys
import os
from subprocess import Popen,PIPE
class Process(object):
'''memached rc script'''
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'''
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 _writePid(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['CACHESIZE'],
'-c',self.args['MAXCONN']]
os.system("chown %s %s" % (self.args['USER'],self.workdir))
return options
def start(self):
pid = self._getPid()
if pid:
print "%s is running..." % 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 "%s start Sucessful \t\t [OK]" % 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 \t\t\t [OK]" % 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,
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()
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python對(duì)象類型及其運(yùn)算方法(詳解)
下面小編就為大家?guī)?lái)一篇Python對(duì)象類型及其運(yùn)算方法(詳解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-07-07
教你用Python pygame設(shè)置窗口標(biāo)題和圖標(biāo)
今天給大家?guī)?lái)的是關(guān)于Python的相關(guān)知識(shí),文章圍繞著用Python pygame設(shè)置窗口標(biāo)題和圖標(biāo)展開(kāi),文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下2021-06-06
python+pygame實(shí)現(xiàn)坦克大戰(zhàn)小游戲的示例代碼(可以自定義子彈速度)
這篇文章主要介紹了python+pygame實(shí)現(xiàn)坦克大戰(zhàn)小游戲---可以自定義子彈速度,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08
pytorch?dataset實(shí)戰(zhàn)案例之讀取數(shù)據(jù)集的代碼
這篇文章主要介紹了pytorch?dataset實(shí)戰(zhàn)案例讀取數(shù)據(jù)集的相關(guān)知識(shí),這段代碼可以作為讀取數(shù)據(jù)集的一個(gè)DataSet類的基礎(chǔ)類,可以擴(kuò)充進(jìn)行修改,以后有類似需要可以拿過(guò)來(lái)修改,本文結(jié)合實(shí)例代碼給大家詳細(xì)講解,需要的朋友可以參考下2022-10-10
淺談python 中的 type(), dtype(), astype()的區(qū)別
這篇文章主要介紹了淺談python 中的 type(), dtype(), astype()的區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-04-04
python實(shí)現(xiàn)調(diào)用攝像頭并拍照發(fā)郵箱
這篇文章主要介紹了python實(shí)現(xiàn)調(diào)用攝像頭并拍照發(fā)郵箱的程序,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下2021-04-04

