Python写memcached 启动脚本
#!/usr/bin/python
#conding:utf8
import sys
from subprocess import Popen,PIPE
import os
class Process(object):
'''memcached rc scrip'''
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 判断pid文件及路径是否存在'''
if not os.path.exists(self.workdir):
os.mkdir(self.workdir)
os.chdir(self.workdir)
def _pidFile(self):
'''/var/tmp/memcached/memcached.pid 定义pid文件路径'''
return os.path.join(self.workdir,'%s.pid' %self.name)
def _writePid(self):
'''将pid写入文件中'''
if self.pid:
with open(self._pidFile(),'w') as fd:
fd.write(str(self.pid))
def start(self):
'''start启动方法'''
self._init()
cmd = self.program + '' + self.args
p = Popen(cmd, stdout=PIPE,shell=True)
self.pid = p.pid
self._writePid()
print '\033[1;32m%s start Sucessful\033[0m' %self.name
def _getPid(self):
p = Popen(['pidof',self.name],stdout=PIPE)
self.pid = p.stdout.read().strip()
return self.pid
def stop(self):
'''stop停止方法'''
pid = self._getPid()
if pid:
os.kill(int(pid),15)
if os.path.exists(self._pidFile()):
os.remove(self._pidFile())
print '\033[1;32m%s is stoped\033[0m' %self.name
else:
print '\033[1;32m%s is not running... \033[0m' %self.name
def restart(self):
'''restart重启方法'''
self.stop()
self.start()
def status(self):
'''status查看状态'''
pid = self._getPid()
if pid:
print '\033[1;32m%s is running... \033[0m' %self.name
else:
print '\033[1;32m%s is not running... \033[0m' %self.name
def help(self):
'''帮助'''
print "\033[1;33mUsage start|stop|status|restart \033[0m "
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:
pm.help()
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()
subprocess的Popen PIPE模块使用参考https://www.cnblogs.com/zhoug2020/p/5079407.html
print args
['/bin/cat', '-input', 'test.txt', '-output', 'diege.txt', '-cmd', "echo '$MONEY'"]
p=subprocess.Popen(args)
当shell=True时,如果arg是个字符串,就使用shell来解释执行这个字符串。如果args是个列表,则第一项被视为命令,
其余的都视为是给shell本身的参数。也就是说,等效于:
subprocess.Popen(['/bin/sh', '-c', args[0], args[1], ...])