rc腳本(類的定義與腳本的結構、start方法、stop和status方法、以daemon方式啟動)
阿新 • • 發佈:2018-01-15
rom bin pip 退出 stdout linux命令 rem 參數化 ssi rc腳本(類的定義與腳本的結構)
1、安裝memcached
yum install memcached -y
2、啟動命令
-d:daemon啟動(後臺啟動)
-p 端口
-u 指定哪個用戶啟動
-m 指定內存
-c 指定連接數
-P 指定pid
memcached -d -p 11211 -u memcached -m 64 -c 1024 -P /var/run/memcached/memcached.pid
參數化: class Myclass(object): def __init__(self,name): self.name=name print ‘I am %s‘ %self.name cn=Myclass(‘wo‘) 結果: I am wo
3、先定義一個腳本的結構
import os import sys from subprocess import Popen,PIPE #這個是執行linux命令的 class Program(object): ‘‘‘memcached rc.script‘‘‘ def __init__(self,name,program,args,workdir): #初始化函數時定義參數 self.name=name #main函數實例化的時候傳入參數,將其作為類的屬性 self.program=program self.args=args self.workdir=workdir def _int(self): #只有一個下劃線,就是一個類的方法 ‘‘‘/var/tmp/memcached‘‘‘ if not os.path.exists(self.workdir): #判斷當這個路徑不存在時 os.mkdir(self.workdir) #創建這個目錄mkdir /var/tmp/memcached os.chdir(self.workdir) #進入這個目錄,cd /var/tmp/memcached def _pidFile(self):#為了輸出‘/var/tmp/memcached/memcached.pid’ ‘‘‘/var/tmp/memcached/memcached.pid‘‘‘ return os.path.join(self.workdir,"%s.pid" %self.name) def _writePid(self):#寫入pid到文件裏 if self.pid: #判斷這個pid是否存在,這個是在start函數定義 with open(self._pidFile(),‘w‘) as fd:#打開pid文件,在上面方法中定義 fd.write(str(self.pid)+‘\n‘) #需要轉換為字符串才能寫入 def start(self): #啟動 self._int() #判斷/var/tmp/memcached存在 cmd=self.program + ‘ ‘ + self.args #執行命令 p=Popen(cmd,stdout=PIPE,shell=True)#執行cmd命令,標準輸出,True表示正確的輸出 self.pid=p.pid self._writePid() print ‘%s successing ...‘ %self.name def stop(self): pass def restart(self): self.start() self.stop() def status(self): pass def help(self): print ‘Usage:{start|stop|status|restart}‘ def main(): #定義一個主函數 name=‘memcached‘ #定義參數 program=‘/usr/bin/memcached‘ args=‘-u memcached -p 11211 -c 1023 -m 64‘ wd=‘/var/tmp/memcached‘ pe=Program(name=name, #將類實例化才能調用構建函數 program=program, args=args, workdir=wd) try: #異常處理,必須接上一個參數 cmd=sys.argv[1] except IndexError,e: print ‘Option error‘ #若沒有參數,則打印 sys.exit(1) #退出腳本 if cmd == ‘start‘: pe.start() elif cmd == ‘stop‘: pe.stop() elif cmd == ‘resatrt‘: pe.restart() elif cmd == ‘status‘: pe.status() else: pe.help() if __name__==‘__main__‘: #函數是主函數,就執行main() main()
import os import sys from subprocess import Popen,PIPE #這個是執行linux命令的 class Program(object): ‘‘‘memcached rc.script‘‘‘ def __init__(self,name,program,args,workdir): #初始化函數時定義參數 self.name=name #main函數實例化的時候傳入參數,將其作為類的屬性 self.program=program self.args=args self.workdir=workdir def _int(self): #只有一個下劃線,就是一個類的方法 ‘‘‘/var/tmp/memcached‘‘‘ if not os.path.exists(self.workdir): #判斷當這個路徑不存在時 os.mkdir(self.workdir) #創建這個目錄mkdir /var/tmp/memcached os.chdir(self.workdir) #進入這個目錄,cd /var/tmp/memcached def _pidFile(self):#為了輸出‘/var/tmp/memcached/memcached.pid’ ‘‘‘/var/tmp/memcached/memcached.pid‘‘‘ return os.path.join(self.workdir,"%s.pid" %self.name) def _writePid(self):#寫入pid到文件裏 if self.pid: #判斷這個pid是否存在,這個是在start函數定義 with open(self._pidFile(),‘w‘) as fd:#打開pid文件,在上面方法中定義 fd.write(str(self.pid)+‘\n‘) #需要轉換為字符串才能寫入 def start(self): #啟動 pid=self._getPid() #判斷下是否正在運行,若是的話就不要啟動了,退出 if pid: #這樣的好處是以免產生不一樣的pid print ‘%s is running...‘ %self.name sys.exit(2) self._int() #判斷/var/tmp/memcached存在 cmd=self.program + ‘ ‘ + self.args #執行命令 p=Popen(cmd,stdout=PIPE,shell=True)#執行cmd命令,標準輸出,True表示正確的輸出 self.pid=p.pid self._writePid() print ‘%s successing ...‘ %self.name def _getPid(self): #獲取到pid後,再kill掉 p=Popen([‘pidof‘,self.name],stdout=PIPE) #pidof表示memcache的pid pid=p.stdout.read().strip() return pid def stop(self): pid=self._getPid() #調用類的方法 if pid: #如果pid存在,則kill -9 pid(這個pid必須要是int) os.kill(int(pid),9) if os.path.exists(self._pidFile()): #判斷pid文件是否存在 os.remove(self._pidFile()) #刪除 print ‘%s is stoped...‘ %self.name def restart(self): self.start() self.stop() def status(self): #判斷pid,若存在就運行,不存在就停止 pid=self._getPid() if pid: print ‘%s is running...‘ %self.name else: print ‘%s is stoped...‘ %self.name def help(self): #__file__和shell裏的$0類似,就是腳本名稱 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‘ pe=Program(name=name, #將類實例化才能調用構建函數 program=program, args=args, workdir=wd) try: #異常處理,必須接上一個參數 cmd=sys.argv[1] except IndexError,e: print ‘Option error‘ #若沒有參數,則打印 sys.exit(1) #退出腳本 if cmd == ‘start‘: pe.start() elif cmd == ‘stop‘: pe.stop() elif cmd == ‘restart‘: pe.restart() elif cmd == ‘status‘: pe.status() else: pe.help() if __name__==‘__main__‘: #函數是主函數,就執行main() main()
rc腳本(類的定義與腳本的結構、start方法、stop和status方法、以daemon方式啟動)