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多线程学习资料
Dec 19 Python
简单介绍Python中的JSON模块
Apr 08 Python
Python同时向控制台和文件输出日志logging的方法
May 26 Python
浅谈机器学习需要的了解的十大算法
Dec 15 Python
遗传算法python版
Mar 19 Python
python 制作自定义包并安装到系统目录的方法
Oct 27 Python
Python3数字求和的实例
Feb 19 Python
基于Python把网站域名解析成ip地址
May 25 Python
使用pytorch实现论文中的unet网络
Jun 24 Python
python中复数的共轭复数知识点总结
Dec 06 Python
Python - 10行代码集2000张美女图
May 23 Python
python基于机器学习预测股票交易信号
May 25 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
PHP句法规则详解 入门学习
2011/11/09 PHP
php 不使用js实现页面跳转
2014/02/11 PHP
thinkPHP下的widget扩展用法实例分析
2015/12/26 PHP
php微信公众号js-sdk开发应用
2016/11/28 PHP
提高Laravel应用性能方法详解
2019/06/24 PHP
鼠标移动到一张图片时变为另一张图片
2006/12/05 Javascript
基于jquery实现的可以编辑选择的下拉框的代码
2010/11/19 Javascript
JS实现图片横向滚动效果示例代码
2013/09/04 Javascript
NodeJS学习笔记之MongoDB模块
2015/01/13 NodeJs
javascript实现点击按钮弹出一个可关闭层窗口同时网页背景变灰的方法
2015/05/13 Javascript
js实现文本框只允许输入数字并限制数字大小的方法
2015/08/19 Javascript
jQuery插件HighCharts绘制2D半圆环图效果示例【附demo源码下载】
2017/03/09 Javascript
Bootstrap弹出框(Popover)被挤压的问题小结
2017/07/11 Javascript
JS+CSS实现滚动数字时钟效果
2017/12/25 Javascript
Vue事件修饰符native、self示例详解
2019/07/09 Javascript
聊聊Vue中provide/inject的应用详解
2019/11/10 Javascript
微信小程序wx.request的简单封装
2019/11/13 Javascript
Python中使用HTMLParser解析html实例
2015/02/08 Python
python实现一个简单的ping工具方法
2019/01/31 Python
Python 循环终止语句的三种方法小结
2019/06/24 Python
Python assert语句的简单使用示例
2019/07/28 Python
详解mac python+selenium+Chrome 简单案例
2019/11/08 Python
Linux下升级安装python3.8并配置pip及yum的教程
2020/01/02 Python
tensorflow没有output结点,存储成pb文件的例子
2020/01/04 Python
Python装饰器原理与基本用法分析
2020/01/07 Python
Python sklearn库实现PCA教程(以鸢尾花分类为例)
2020/02/24 Python
Python 常用日期处理 -- calendar 与 dateutil 模块的使用
2020/09/02 Python
Pycharm编辑器功能之代码折叠效果的实现代码
2020/10/15 Python
计算机科学技术自荐信
2014/06/12 职场文书
机关党员三严三实心得体会
2014/10/13 职场文书
党的群众路线学习笔记
2014/11/06 职场文书
完美处理python与anaconda环境变量的冲突问题
2021/04/07 Python
Python基础 括号()[]{}的详解
2021/11/07 Python
SQL Server实现分页方法介绍
2022/03/16 SQL Server
Java后端 Dubbo retries 超时重试机制的解决方案
2022/04/14 Java/Android
Win11安装升级时提示“该电脑必须支持安全启动”
2022/04/19 数码科技