一、编写启动脚本
1.写一个启动脚本。
对mencached做启动脚本。
2.先把一个结构搭建好。
import sys
class Progames(object): # 创建一个类
def __init__(self, name, progame, workdir, args): # 通过构造函数,在脚本运行的时候就传入4个参数,就不用手动去指定参数了。
self.name = name
self.progame = progame
self.args = args
self.workdir = workdir
def _init(self): #初始化普通的方法。判断有没有目录,如果没有就创建。
def start(self): # 定义start 方法。启动程序
def stop(self): # 定义stop方法,关闭程序
def restart(self): # 定义重启方法,重启程序,也就是执行关闭和启动的方法。
self.stop()
self.start()
def status(self): # 定义status方法,查看运行情况
def help(self): # 定义help方法,查看帮助
def main(): # 定义一个函数,通过调用这个函数来控制程序。
name = 'memcached' #这几个参数就是调用类时初始化传入的参数
progame = '/usr/bin/memcached'
workdir = '/var/tmp/memcached'
args = '-u nobody -p 11211 -c 1024 -m 64'
pm = Progames(name = name,
progame = progame,
workdir = workdir,
args = args)
try: #判断输入的第一个参数 类似$1
cmd = sys.argv[1]
except IndexError, e: #当捕获了indexerror错误后,输出错误信息
print("Option error")
sys.exit()
if cmd == 'start': #如果参数为start ,调用start方法
pm.start()
elif cm == 'stop': #如果参数为start ,调用stop方法
pm.stop()
elif cm == 'restart': #如果参数为start ,调用restart方法
pm.restart()
elif cm == 'status': #如果参数为start ,调用status方法
pm.status()
else: #如果都不是以上参数,输出help信息
pm.help()
if __name__ == '__main__': # 如果调用的是本身,就启动main函数。
main()
3.编写start方法。
1.先对_init方法进行编写。
def _init(self):
if not os.path.exists(self.workdir): #判断文件是否存在。如果不存在,创建目录
os.mkdir(self.workdir) #不存在就创建目录,
os.chdir(self.workdir) #进入目录,chdir 类似cd命令
2.调用from subprocess import PIPE,Popen 来执行shell
from subprocess import PIPE,Popen
def start(self):
cmd = self.progame + ' '+ self.args #定义启动的命令。shell下的启动命令。
cmd = Popen(cmd,stdout=PIPE,shell=True)
self.pid = p.pid #p.pid可以得到进程号。用一个对象属性接收一下,方便写入到pid文件中
测试Popen函数,可以看到执行了shell命令。
3.继续定义2个方法,一个是定义pid的绝对路径,一个是定义写入pid文件的方法。