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


Posted in Python onAugust 14, 2020

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()

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

Python 相关文章推荐
Python中利用Scipy包的SIFT方法进行图片识别的实例教程
Jun 03 Python
python中pandas.DataFrame的简单操作方法(创建、索引、增添与删除)
Mar 12 Python
Python Xml文件添加字节属性的方法
Mar 31 Python
python使用tornado实现登录和登出
Jul 28 Python
python可视化爬虫界面之天气查询
Jul 03 Python
Python基于OpenCV实现人脸检测并保存
Jul 23 Python
python字典的遍历3种方法详解
Aug 10 Python
python多任务之协程的使用详解
Aug 26 Python
Python 实现一行输入多个数字(用空格隔开)
Apr 29 Python
python下对hsv颜色空间进行量化操作
Jun 04 Python
一文搞懂如何实现Go 超时控制
Mar 30 Python
Python制作春联的示例代码
Jan 22 Python
Python自动巡检H3C交换机实现过程解析
Aug 14 #Python
基于python调用jenkins-cli实现快速发布
Aug 14 #Python
使用tensorflow进行音乐类型的分类
Aug 14 #Python
10行Python代码实现Web自动化管控的示例代码
Aug 14 #Python
如何真正的了解python装饰器
Aug 14 #Python
详解python metaclass(元类)
Aug 13 #Python
MAC平台基于Python Appium环境搭建过程图解
Aug 13 #Python
You might like
利用discuz自带通行证整合dedecms的方法以及文件下载
2007/03/06 PHP
php知道与问问的采集插件代码
2010/10/12 PHP
PHP中通过fopen()函数访问远程文件示例
2014/11/18 PHP
PHP获取当前系统时间的方法小结
2018/10/03 PHP
Prototype最新版(1.5 rc2)使用指南(1)
2007/01/10 Javascript
一段批量给页面上的控件赋值js
2010/06/19 Javascript
Jquery easyUI 更新行示例
2014/03/06 Javascript
jquery加载图片时以淡入方式显示的方法
2015/01/14 Javascript
jQuery简单实现仿京东分类导航层效果
2016/06/07 Javascript
AngularJS基础 ng-model 指令详解及示例代码
2016/08/02 Javascript
JavaScript实现的XML与JSON互转功能详解
2017/02/16 Javascript
jQuery滑动到底部加载下一页数据的实例代码
2017/05/22 jQuery
JavaScript使用Ajax上传文件的示例代码
2017/08/10 Javascript
vue实现点击图片放大效果
2017/08/15 Javascript
vue-cli项目中使用Mockjs详解
2018/05/14 Javascript
微信小程序城市选择及搜索功能的方法
2019/03/22 Javascript
原生js实现自定义消息提示框
2020/11/19 Javascript
可拖拽组件slider.js使用方法详解
2020/12/04 Javascript
Python自动调用IE打开某个网站的方法
2015/06/03 Python
浅谈Python peewee 使用经验
2017/10/20 Python
Python 的AES加密与解密实现
2019/07/09 Python
利用Python绘制Jazz网络图的例子
2019/11/21 Python
python 实现读取csv数据,分类求和 再写进 csv
2020/05/18 Python
涂鸦板简单实现 Html5编写属于自己的画画板
2016/07/05 HTML / CSS
Groupon荷兰官方网站:高达70%的折扣
2019/11/01 全球购物
体育专业个人求职信范文
2013/12/27 职场文书
巧克力蛋糕店创业计划书
2014/01/14 职场文书
大学新生军训感言
2014/02/25 职场文书
会员活动策划方案
2014/08/19 职场文书
私人委托书格式
2014/09/10 职场文书
民间借贷借条如何写
2015/05/26 职场文书
土木工程毕业答辩开场白
2015/05/29 职场文书
详解MySQL InnoDB存储引擎的内存管理
2021/04/08 MySQL
MySQL into_Mysql中replace与replace into用法案例详解
2021/09/14 MySQL
详解JS数组方法
2021/11/20 Javascript
你知道Java Spring的两种事务吗
2022/03/16 Java/Android