Python學習-20180112

1、 rc腳本(類的定義與腳本的結構)
2、rc腳本(start方法)
3、rc腳本(stop和status方法)
4、rc腳本(以daemon方式啓動)python

在linux下安裝memcached,並用python寫一個啓動,關閉,啓動腳本linux

#根據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()
相關文章
相關標籤/搜索