Python编写memcached启动脚本代码实例

所属分类: 脚本专栏 / python 阅读数: 482
收藏 0 赞 0 分享

memcached是一套分布式的高速缓存系统,由LiveJournal的Brad Fitzpatrick开发,但被许多网站使用。这是一套开放源代码软件,以BSD license授权发布。

memcached缺乏认证以及安全管制,这代表应该将memcached服务器放置在防火墙后。

memcached的API使用三十二比特的循环冗余校验(CRC-32)计算键值后,将数据分散在不同的机器上。当表格满了以后,接下来新增的数据会以LRU机制替换掉。由于memcached通常只是当作缓存系统使用,所以使用memcached的应用程序在写回较慢的系统时(像是后端的数据库)需要额外的代码更新memcached内的数据。

memcached作为缓存文件服务,默认是操作系统里面是可以直接yum -y install memcached进行安装的。

/etc/init.d/memcached 是属于系统shell编写的管理脚本,下面这个脚本是python脚本编写出来的memcached管理脚本,和shell编写的脚本实现的效果一样。

代码如下

#!/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()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

更多精彩内容其他人还在看

python2.7无法使用pip的解决方法(安装easy_install)

下面小编就为大家分享一篇python2.7无法使用pip的解决方法(安装easy_install),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
收藏 0 赞 0 分享

Python实现的计算马氏距离算法示例

这篇文章主要介绍了Python实现的计算马氏距离算法,简单说明了马氏距离算法原理,并结合实例形式分析了Python实现与使用马氏距离算法的相关操作技巧,需要的朋友可以参考下
收藏 0 赞 0 分享

python逐行读写txt文件的实例讲解

下面小编就为大家分享一篇python逐行读写txt文件的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
收藏 0 赞 0 分享

python批量读取txt文件为DataFrame的方法

下面小编就为大家分享一篇python批量读取txt文件为DataFrame的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
收藏 0 赞 0 分享

Python通过调用mysql存储过程实现更新数据功能示例

这篇文章主要介绍了Python通过调用mysql存储过程实现更新数据功能,结合实例形式分析了Python调用mysql存储过程实现更新数据的具体步骤与相关操作技巧,需要的朋友可以参考下
收藏 0 赞 0 分享

Python实现的HMacMD5加密算法示例

这篇文章主要介绍了Python实现的HMacMD5加密算法,简单说明了HMAC-MD5加密算法的概念、原理并结合实例形式分析了Python实现HMAC-MD5加密算法的相关操作技巧,,末尾还附带了Java实现HMAC-MD5加密算法的示例,需要的朋友可以参考下
收藏 0 赞 0 分享

图解Python变量与赋值

Python是一门独特的语言,与C语言有很大区别,初学Python很多萌新表示对变量与赋值不理解,这里就大家介绍一下,需要的朋友可以参考下
收藏 0 赞 0 分享

Python中的并发处理之asyncio包使用的详解

本篇文章主要介绍了Python中的并发处理之asyncio包使用的详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

Python获取二维矩阵每列最大值的方法

下面小编就为大家分享一篇Python获取二维矩阵每列最大值的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
收藏 0 赞 0 分享

numpy找出array中的最大值,最小值实例

下面小编就为大家分享一篇numpy找出array中的最大值,最小值实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
收藏 0 赞 0 分享
查看更多