zoukankan      html  css  js  c++  java
  • 实例:用类来写一个 memcached 启动脚本

    [root@localhost ~]$ yum install -y memcached
    #!/usr/bin/env python
    #-*- coding:utf-8 -*-
    
    import os
    import sys
    from subprocess import Popen, PIPE
    
    class Process(object):
    
        def __init__(self, name, program, args, workdir):
            self.name = name
            self.program = program
            self.args = args
            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):
            '''把pid写入到pid文件'''
            if self.pid:
                with open(self._pidFile(), 'w') as fd:
                    fd.write(str(self.pid))
    
        def _getPid(self):
            '''获取pid'''
            p = Popen(['pidof', self.name], stdout=PIPE)
            pid = p.stdout.read().strip()
            return pid
    
        def start(self):
            '''定义start动作'''
            self._init()
            cmd = self.program + ' ' + self.args
            p = Popen(cmd, stdout=PIPE, shell=True)
            self.pid = p.pid
            self._writePid()
            print("%s start Successful" % self.name)
    
        def stop(self):
            '''定义stop动作'''
            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):
            '''定义restart动作'''
            self.stop()
            self.start()
    
        def status(self):
            '''定义status动作'''
            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|restart|status}" % __file__)
    
    def main():
        name = 'memcached'
        program = '/usr/bin/memcached'
        args = '-u nobody -p 11211 -C 1024 -m 64'
        workdir = '/var/tmp/memcached'
        pm = Process(name = name, program = program, args = args, workdir = workdir)
    
        try:
            cmd = sys.argv[1]
        except IndexError, e:
            pm.help()
            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()

        

        

  • 相关阅读:
    出队列操作
    出队列操作
    栈和队列7 数据结构和算法29
    KE上传图片
    asp.net常用快捷键
    基于jquery框架实现以下行的向上、向下和删除
    each的用法积累
    JTemplate使用2
    kindeditor API ,kindeditor使用手册,kindeditor函数,kindeditor使用,超级大收集(转载)
    线上帮助
  • 原文地址:https://www.cnblogs.com/pzk7788/p/10280319.html
Copyright © 2011-2022 走看看