python启动脚本

来源:互联网 发布:nginx 跳转到指定ip 编辑:程序博客网 时间:2024/06/05 23:08
以服务memcached为例,用python写一个启动脚本,实现start,stop,restart,status,help等功能。
[root@js python]# cat rc.memcached.py#!/usr/bin/env pythonimport sysfrom subprocess import Popen,PIPEimport osclass Process(object):    '''memcached rc scripts'''    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)    def _writePid(self):        if self.pid:            with open(self._pidFile(),'w') as fd:                fd.write(str(self.pid))    def start(self):        pid = self._getPid()        if pid:            print "%s is already running" %self.name            sys.exit()        self._init()        cmd = self.program + ' ' +self.args        p = Popen(cmd,stdout=PIPE,shell=True)        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'    args = '-u nobody -p 11211 -c 1024 -m 64'    workdir = '/var/tmp/memcached'    pm =Process(name=name,                program=program,                args=args,                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.memcached.py start //启动memcached is already running[root@js python]# ps -ef |grep memcached   //查看pid496        1656      1  0 07:31 ?        00:00:00 /usr/bin/memcached -u memcached -p 11211 -m 64 -c 1024 -d -P /var/tmp/memcached/memcached.pidroot       1672   1497  0 07:37 pts/0    00:00:00 grep memcached[root@js python]# cat /var/tmp/memcached/memcached.pid1656                                    //pid文件[root@js python]# python rc.memcached.py stop    //停止memcached is stopped[root@js python]# python rc.memcached.py status   //状态memcached is stopped[root@js python]# python rc.memcached.py dhas//输错会提示help信息Usage:rc.memcached.py {start|stop|restart|status}
原创粉丝点击