rc脚本练习

来源:互联网 发布:2017淘宝全年的交易额 编辑:程序博客网 时间:2024/06/04 20:12
rc脚本练习#!/usr/bin/env python#coding:utf8import sysimport osfrom subprocess import Popen, PIPEclass Process(object):'''memcached rc script'''args = {'USER':'memcached','PORT':11211,'MAXCONN':1024,'CACHESIZE':'64','OPTIONS':''}def __init__(self, name, program , workdir):self.name = nameself.program = programself.workdir = workdirdef _init(self):'''/var/tmp/memcached'''if not os.path.exists(self.workdir):os.mkdir(self.workdir)os.chdir(self.workdir)def _pidFile(self):'''/var/tpm/memcached/memcached.pid'''return os.path.join(self.workdir,"%s.pid" % self.name)def _writhPid(self):if self.pid:with open(self._pidFile(),'w') as fd:fd.write(str(self.pid))def _readConf(self, f):with open(f) as fd:lines = fd.readlines()return dict([i.strip().replace('"','').split('=') for i in linesdef _parseArgs(self):conf = self._readConf('/etc/sysconfig/memcached')if 'USER' in conf:self.args['USER'] = conf['USER']if 'PORT'in conf:self.args['PORT'] = conf['PORT']if 'MAXCONN' in conf:self.args['MAXCONN'] = conf['MAXCONN']if 'CACHESEIZE' in conf:self.args['CACHESIZE'] = conf['CACHESIZE']options = ['-u', self.args['USER'],'-p', self.args['PORT'],'-m', self.args['CACHESIZE'],'-c', self.args['MAXCONN']]os.system("chown %s %s" % (self.args['USER'], self.workdir))return optionsdef start(self):pid = self._getPid()if pid:print "%s is running..." % self.namesys.exit()self._init()cmd = [self.program] + self._parseArgs() + ['-d','-P', self._pidFileprint cmdp = Popen(cmd, stdout=PIPE)# self.pid = p.pid# self._writhPid()print "%s start Sucessful" % self.namedef _getPid(self):p =Popen(['pidof', self.name], stdout=PIPE)pid = p.stdout.read().strip()return piddef stop(self):pid = self._getPid()if pid:os.kill(int(pid), 15)if os.path.exists(self._pidFile()):os.remove(self._pidFile())print "%s is stopped" % self.namedef restart(self):self.stop()self.start()def status(self):pid = self._getPid()if pid:print "%s is already runing" % self.nameelse:print "%s is not runing" % self.namedef help(self):print "Usage: %s {start|stop|status|restart} " % __file__def main():name = 'memcached'prog = '/usr/bin/memcached'args = '-u nobody -p 11211 -c 1024 -m 64'wd = '/var/tmp/memcached'pm = Process(name=name,program=prog,# args=args,workdir=wd)try:cmd = sys.argv[1]except IndexError,e:print "Option error"sys.exit()if cmd == 'start':pm.start()elif cmd == 'stop':pm.stop()elif cmd == 'restart':pm.restart()elif cmd == 'status':pm.status()else:pm.help()if __name__ == '__main__':main()

原创粉丝点击