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