设为首页 收藏本站
查看: 783|回复: 0

[经验分享] Python编写的memcached启动脚本

[复制链接]

尚未签到

发表于 2018-8-9 09:12:08 | 显示全部楼层 |阅读模式
#/usr/bin/env python  
# -*- coding:utf-8 -*-
  
# @time   :2018/1/12 21:18
  
# @Author :FengXiaoqing
  
# @file   :rc-d.py
  
import os
  
import sys
  
from subprocess import Popen,PIPE
  
class Process(object):
  
    '''memcached rc script'''
  
    args = {'USER':'memcached',
  
            'PORT':11211,
  
            'MAXCONN':1024,
  
            'CACHESIZE':64,
  
            'OPTIONS': ''}
  
    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 _writhPid(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['MAXCONN'],
  
                   '-c',self.args['CACHESIZE']]
  
        return options
  
    def start(self):
  
        pid = self._getPid()
  
        if pid:
  
            print "%s is already runnig..." % self.name
  
            sys.exit()
  
        self._init()
  
        cmd = [self.program]+self._parseArgs()+['-d','-P',self._pidFile()]
  
        p = Popen(cmd,stdout=PIPE)
  
        print "%s start Sucessful.." % 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 .") % 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'
  
    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()

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-548951-1-1.html 上篇帖子: python加密模块-hashlib模块 下篇帖子: 【机器学习】Python 快速入门笔记
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表