Python学习-20180112

一、 rc脚本(类的定义与脚本的结构)
二、rc脚本(start方法)
三、rc脚本(stop和status方法)
四、rc脚本(以daemon方式启动)

在linux下安装memcached,并用python写一个启动,关闭,启动脚本

#根据linux下memcached启动脚本写一个python版
import sys

import os

from subprocess import Popen, PIPE


class Process(object):
    '''memcached start scrint'''
    # 构造函数,参数含义:程序名字,执行文件,参数,存放pid目录
    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)
    #把pid写入文件
    def _writePid(self):
        # 判断pid是否存在
        if self.pid:
            with open(self._pidFile(),'w') as fd:#打开pid文件,在上面方法中定义
                fd.write(str(self.pid)+'\n')   #需要转换为字符串才能写入
    #启动
    def start(self):
        #调用初始化函数,判断目录是否存在
        self._init()
        cmd = self.program + ' ' + self.args
        p=Popen(cmd,stdout=PIPE,shell=True)#执行cmd命令,标准输出,True表示正确的输出
        self.pid=p.pid
        self._writePid()
        print '%s start success' %self.name

    #获取pid函数
    def _getPid(self):
        p=Popen(['pidof',self.name],stdout=PIPE)
        pid=p.stdout.read().strip()
        return pid
    #关闭
    def stop(self):
        pid =self._getPid()
        self.stop()
        #判断pid是否存在,如果存在则kiil掉
        if pid:
            os.kill(int(pid),9)
            if os.path.exists(self._pidFile()):
                os.remove(self._pidFile())
            print '%s stopped' %self.name
    #重启
    def restart(self):
        #先调用stop再调用start
        self.stop()
        self.start()
    #状态
    def status(self):
        pid=self._getPid()
        #判断pid是否存在,
        if pid:
            print '%s running' %self.name
        else:
            print '%s stopped' %self.name

    #help,提示脚本输入的参数
    def help(self):
        print 'Usage:%s {start|stop|status|restart}' %__file__

#主函数
def main():

    name='memcached'
    program='/usr/bin/memcached'
    args='-u memcached -p 11211 -c 1023 -m 64'
    wd='/var/tmp/memcached'
    #类的实例化
    pm = Process(name=name,
                 program=program,
                 args=args,
                 workdir=wd)

    #如果脚本没带参数,则提示并退出
    try:
        cmd=sys.argv[1]
    except IndexError,e:
        print ('Option error')
        sys.exit()
    #如果输入的是start,就调用启动函数
    if cmd=='start':
        pm.start()
    elif cmd=='stop':
        pm.stop()
    elif cmd=='resatrt':
        pm.restart()
    elif cmd=='status':
        pm.status()
    else:
        pm.help()

猜你喜欢

转载自my.oschina.net/u/3755326/blog/1606975