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 7月 16 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
结束。
阅读全文
0 0
- python启动脚本--daemon形式
- systemd形式的启动脚本
- daemon 的启动脚本存放目录与启动方式
- mr-jobhistory-daemon.sh 启动和关闭脚本
- python启动脚本
- Elasticsearch python 启动脚本
- python脚本中启动另一个python脚本
- memcached 使用 daemon 脚本
- 开启自启动python脚本
- linux开机启动python脚本
- Python脚本启动Java服务
- 配置定时启动python 脚本
- 树莓派开机启动python脚本
- spark 上python启动脚本
- Daemon 方式启动
- impala daemon启动失败
- 用 Python写 daemon
- python daemon 守护进程
- NFS服务器安转和使用
- C++ 默认构造函数
- POJ3277-City Horizon
- 设计模式之职责链模式
- 微服务学习一服务化架构的演进历史
- python启动脚本--daemon形式
- 链表带环问题
- Vs2013中opencv的配置(添加属性表)
- STM32简介
- 玲珑杯 1143
- 带环相交
- Openwrt:基于MT7628/MT7688的PWM驱动
- HDU
- CSS中margin和padding的区别