rc脚本(类的定义与脚本的结构start方法stop和status方法以daemon方式启动)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了rc脚本(类的定义与脚本的结构start方法stop和status方法以daemon方式启动)相关的知识,希望对你有一定的参考价值。
rc脚本(类的定义与脚本的结构)1、安装memcached
yum install memcached -y
2、启动命令
-d:daemon启动(后台启动)
-p 端口
-u 指定哪个用户启动
-m 指定内存
-c 指定连接数
-P 指定pid
memcached -d -p 11211 -u memcached -m 64 -c 1024 -P /var/run/memcached/memcached.pid
参数化:
class Myclass(object):
def __init__(self,name):
self.name=name
print ‘I am %s‘ %self.name
cn=Myclass(‘wo‘)
结果:
I am wo
3、先定义一个脚本的结构
import os
import sys
from subprocess import Popen,PIPE #这个是执行linux命令的
class Program(object):
‘‘‘memcached rc.script‘‘‘
def __init__(self,name,program,args,workdir): #初始化函数时定义参数
self.name=name #main函数实例化的时候传入参数,将其作为类的属性
self.program=program
self.args=args
self.workdir=workdir
def _int(self): #只有一个下划线,就是一个类的方法
‘‘‘/var/tmp/memcached‘‘‘
if not os.path.exists(self.workdir): #判断当这个路径不存在时
os.mkdir(self.workdir) #创建这个目录mkdir /var/tmp/memcached
os.chdir(self.workdir) #进入这个目录,cd /var/tmp/memcached
def _pidFile(self):#为了输出‘/var/tmp/memcached/memcached.pid’
‘‘‘/var/tmp/memcached/memcached.pid‘‘‘
return os.path.join(self.workdir,"%s.pid" %self.name)
def _writePid(self):#写入pid到文件里
if self.pid: #判断这个pid是否存在,这个是在start函数定义
with open(self._pidFile(),‘w‘) as fd:#打开pid文件,在上面方法中定义
fd.write(str(self.pid)+‘\n‘) #需要转换为字符串才能写入
def start(self): #启动
self._int() #判断/var/tmp/memcached存在
cmd=self.program + ‘ ‘ + self.args #执行命令
p=Popen(cmd,stdout=PIPE,shell=True)#执行cmd命令,标准输出,True表示正确的输出
self.pid=p.pid
self._writePid()
print ‘%s successing ...‘ %self.name
def stop(self):
pass
def restart(self):
self.start()
self.stop()
def status(self):
pass
def help(self):
print ‘Usage:{start|stop|status|restart}‘
def main(): #定义一个主函数
name=‘memcached‘ #定义参数
program=‘/usr/bin/memcached‘
args=‘-u memcached -p 11211 -c 1023 -m 64‘
wd=‘/var/tmp/memcached‘
pe=Program(name=name, #将类实例化才能调用构建函数
program=program,
args=args,
workdir=wd)
try: #异常处理,必须接上一个参数
cmd=sys.argv[1]
except IndexError,e:
print ‘Option error‘ #若没有参数,则打印
sys.exit(1) #退出脚本
if cmd == ‘start‘:
pe.start()
elif cmd == ‘stop‘:
pe.stop()
elif cmd == ‘resatrt‘:
pe.restart()
elif cmd == ‘status‘:
pe.status()
else:
pe.help()
if __name__==‘__main__‘: #函数是主函数,就执行main()
main()
import os
import sys
from subprocess import Popen,PIPE #这个是执行linux命令的
class Program(object):
‘‘‘memcached rc.script‘‘‘
def __init__(self,name,program,args,workdir): #初始化函数时定义参数
self.name=name #main函数实例化的时候传入参数,将其作为类的属性
self.program=program
self.args=args
self.workdir=workdir
def _int(self): #只有一个下划线,就是一个类的方法
‘‘‘/var/tmp/memcached‘‘‘
if not os.path.exists(self.workdir): #判断当这个路径不存在时
os.mkdir(self.workdir) #创建这个目录mkdir /var/tmp/memcached
os.chdir(self.workdir) #进入这个目录,cd /var/tmp/memcached
def _pidFile(self):#为了输出‘/var/tmp/memcached/memcached.pid’
‘‘‘/var/tmp/memcached/memcached.pid‘‘‘
return os.path.join(self.workdir,"%s.pid" %self.name)
def _writePid(self):#写入pid到文件里
if self.pid: #判断这个pid是否存在,这个是在start函数定义
with open(self._pidFile(),‘w‘) as fd:#打开pid文件,在上面方法中定义
fd.write(str(self.pid)+‘\n‘) #需要转换为字符串才能写入
def start(self): #启动
pid=self._getPid() #判断下是否正在运行,若是的话就不要启动了,退出
if pid: #这样的好处是以免产生不一样的pid
print ‘%s is running...‘ %self.name
sys.exit(2)
self._int() #判断/var/tmp/memcached存在
cmd=self.program + ‘ ‘ + self.args #执行命令
p=Popen(cmd,stdout=PIPE,shell=True)#执行cmd命令,标准输出,True表示正确的输出
self.pid=p.pid
self._writePid()
print ‘%s successing ...‘ %self.name
def _getPid(self): #获取到pid后,再kill掉
p=Popen([‘pidof‘,self.name],stdout=PIPE) #pidof表示memcache的pid
pid=p.stdout.read().strip()
return pid
def stop(self):
pid=self._getPid() #调用类的方法
if pid: #如果pid存在,则kill -9 pid(这个pid必须要是int)
os.kill(int(pid),9)
if os.path.exists(self._pidFile()): #判断pid文件是否存在
os.remove(self._pidFile()) #删除
print ‘%s is stoped...‘ %self.name
def restart(self):
self.start()
self.stop()
def status(self): #判断pid,若存在就运行,不存在就停止
pid=self._getPid()
if pid:
print ‘%s is running...‘ %self.name
else:
print ‘%s is stoped...‘ %self.name
def help(self): #__file__和shell里的$0类似,就是脚本名称
print ‘Usage:%s {start|stop|status|restart}‘ %__file__
def main(): #定义一个主函数
name=‘memcached‘ #定义参数
program=‘/usr/bin/memcached‘
args=‘-u memcached -p 11211 -c 1023 -m 64‘
wd=‘/var/tmp/memcached‘
pe=Program(name=name, #将类实例化才能调用构建函数
program=program,
args=args,
workdir=wd)
try: #异常处理,必须接上一个参数
cmd=sys.argv[1]
except IndexError,e:
print ‘Option error‘ #若没有参数,则打印
sys.exit(1) #退出脚本
if cmd == ‘start‘:
pe.start()
elif cmd == ‘stop‘:
pe.stop()
elif cmd == ‘restart‘:
pe.restart()
elif cmd == ‘status‘:
pe.status()
else:
pe.help()
if __name__==‘__main__‘: #函数是主函数,就执行main()
main()
以上是关于rc脚本(类的定义与脚本的结构start方法stop和status方法以daemon方式启动)的主要内容,如果未能解决你的问题,请参考以下文章