python启动脚本--daemon形式

来源:互联网 发布:最好的网络电话软件 编辑:程序博客网 时间:2024/06/05 00:27

和上一篇实现同样的start,stop,restart,status,help等功能,不同的是以daemon形式,直接贴代码:

[root@js python]# cat rc.memcached1.py#!/usr/bin/env pythonimport sysfrom subprocess import Popen,PIPEimport osclass Process(object):    '''memcached rc scripts'''    args = {'USER':'memcached',            'PORT':11211,            'MAXCONN':1024,            'CACHESIZE':64,            'OPTIONS':''}    def __init__(self,name,program,workdir):        self.name = name        self.program = program        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)    def _writePid(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 lines])    def _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 'CACHESIZE' in conf:            self.args['CACHESIZE'] = conf['CACHESIZE']        op = ['-u',self.args['USER'],'-p',self.args['PORT'],'-m',self.args['CACHESIZE'],'-c',self.args['MAXCONN']]        return op    def start(self):        pid = self._getPid()        if pid:            print "%s is already running" %self.name            sys.exit()        self._init()        os.system("chown %s %s" %(self.args['USER'],self.workdir))        cmd = [self.program] + self._parseArgs() + ['-d','-P',self._pidFile()]        print cmd        p = Popen(cmd,stdout=PIPE)        #self.pid = p.pid        #self._writePid()        print "%s is success" %self.name    def _getPid(self):        p = Popen(['pidof',self.name],stdout=PIPE)        pid = p.stdout.read().strip()        return pid    def 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.name    def restart(self):        self.stop()        self.start()    def status(self):        pid = self._getPid()        if pid:            print "%s is running" %self.name        else:            print "%s is stopped" %self.name    def help(self):        print "Usage:%s {start|stop|restart|status}" %__file__def main():    name = 'memcached'    program = '/usr/bin/memcached'    workdir = '/var/tmp/memcached'    pm =Process(name=name,                program=program,                workdir=workdir)    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()

测试一下:

[root@js python]# python rc.memcached1.py  start['/usr/bin/memcached', '-u', 'memcached', '-p', '11211', '-m', '64', '-c', '1024', '-d', '-P', '/var/tmp/memcached/memcached.pid']memcached is success[root@js python]# ps -ef|grep memcached496        1828      1  0 07:47 ?        00:00:00 /usr/bin/memcached -u memcached -p 11211 -m 64 -c 1024 -d -P /var/tmp/memcached/memcached.pidroot       1835   1497  0 07:47 pts/0    00:00:00 grep memcached[root@js python]# cat /var/tmp/memcached/memcached.pid1828[root@js python]# ls -ld !$ls -ld /var/tmp/memcached/memcached.pid-rw-r--r-- 1 memcached memcached 5 716 07:47 /var/tmp/memcached/memcached.pid[root@js python]# python rc.memcached1.py  stopmemcached is stopped[root@js python]# cat /var/tmp/memcached/memcached.pidcat: /var/tmp/memcached/memcached.pid: 没有那个文件或目录[root@js python]# python rc.memcached1.py  statusmemcached is stopped

结束。