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()