python—memcached启动脚本

一、一般模式

启动选项:start、stop、restart、status

#!/usr/bin/env python
#encoding:utf-8

import sys
import os
from subprocess import Popen, PIPE

class Process(object):
    '''memcached rc script'''
    def __init__(self,name,program,argv,workdir):  # 初始化类,包含:self、程序名、程序启动文件、执行参数、pid文件路径
        self.name = name
        self.program = program
        self.argv = argv
        self.workdir = workdir
     
        
    def __workDir(self):   # 判断pid文件路径,没有则创建
        '''/var/tmp/memcached'''
        if not os.path.exists("/var/tmp/memcached"):
            os.mkdir("/var/tmp/memcached")
            os.chdir("/var/tmp/memcached")
            
    def __pidFile(self):   # 获取pid文件,带路径
        '''/var/tmp/memcached/memcached.pid'''
        return os.path.join(self.workdir,"%s.pid" % self.name)
        
    def __writePid(self):  # 将pid写进pid文件中,pid为字符串类型
        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 running" % self.name)
            sys.exit()
      
        self.__workDir()
        cmd = self.program + " " + self.argv
        p = Popen(cmd,stdout=PIPE,shell=True)   # 启动进程方式
        self.pid = p.pid     # 加self,声明为类的属性,便于其他内部函数调用
        self.__writePid()
        print("%s start successful" % self.name)
     
        
    def __getPid(self):
        p = Popen(["pidof",self.name],stdout=PIPE)  # 获取pid方式
        pid = p.stdout.read().strip()    # 过滤pid                 
        return pid
        
    def stop(self):
        pid = self.__getPid()
        if pid:
            os.kill(int(pid),15)         # 杀掉进程方式,pid为数值类型
            if os.path.exists(self.__pidFile()):
                os.remove(self.__pidFile())     # 删掉pid文件
            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 not running" % self.name)
    
            
    def help(self):
        print ("Usage: %s {start|stop|restart|status}" % __file__)
    
        
def main():
    name = "memcached"
    program = "/data/program/memcached/bin/memcached"
    workdir = "/var/tmp/memcached"
    argv = "-u nobody -p 11211 -c 1024 -m 64"
    pm = Process(name = name,
                 program = program,
                 workdir = workdir,
                 argv = argv)    # 传参,也可以按顺序只写实参
    try:
        cmd = sys.argv[1]  # 如启动参数有误,则抛出异常,并退出
   
    except Exception as e:
        raise e
        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()

二、后台模式

   说明:后台方式:-d -P XXX.pid ;如有配置文件,则配置文件参数替换掉默认参数

#!/usr/bin/env python
#encoding:utf-8

import sys
import os
from subprocess import Popen, PIPE

class Process(object):
    '''memcached rc script'''
     
    argv = {"USER": "memcached",
            "PORT": "11211",
            "MAXCONN": "1024",
            "CACHESIZE": "64",
            "OPTIONS": ""}   # 默认启动参数
            
    def __init__(self,name,program,workdir):  # 初始化类,包含:self、程序名、程序启动文件、pid文件路径
        self.name = name
        self.program = program
        self.workdir = workdir
    
        
    def __readConf(self,f):    # 读取配置文件,返回字典
        with open(f,"r") as fd:
            lines = fd.readlines()
            return dict([i.strip().split("=") for i in lines])
            
    def __parseArgv(self):    # 配置文件替换默认参数
    '''/etc/sysconfig/memcached'''
        conf = self.__readConf("/etc/sysconfig/memcached")
        
        if "USER" in conf:
            self.argv["USER"] = conf["USER"]
            
        if "PORT" in conf:
            self.argv["PORT"] = conf["PORT"]
            
        if "MAXCONN" in conf:
            self.argv["MAXCONN"] = conf["MAXCONN"]
            
        if "CACHESIZE" in conf:
           self.argv["CACHESIZE"] = conf["CACHESIZE"]
        
        options = ["-u",self.argv["USER"],
                   "-p",self.argv["PORT"],
                   "-m",self.argv["CACHESIZE"],
                   "-c",self.argv["MAXCONN"]]  # 替换的参数,以列表形式返回
                   
        os.system("chown %s %s" % (self.argv["USER"],self.workdir)) # 修改pid文件目录的属主为启动用户,才能写pid文件
        print ("启动参数为:%s" % str(options))
        return options
        
    def __workDir(self):   # 判断pid文件路径,没有则创建
        '''/var/tmp/memcached'''
        if not os.path.exists("/var/tmp/memcached"):
            os.mkdir("/var/tmp/memcached")
            os.chdir("/var/tmp/memcached")
            
    def __pidFile(self):   # 获取pid文件,带路径
        '''/var/tmp/memcached/memcached.pid'''
        return os.path.join(self.workdir,"%s.pid" % self.name)
        
    def start(self):
        pid = self.__getPid()
        if pid:
            print ("%s is running" % self.name)
            sys.exit()
      
        self.__workDir()
        cmd = [self.program] + self.__parseArgv() + ["-d", "-P", self.__pidFile()]  # 启动参数,后台启动方式,按指定文件自动写pid
        p = Popen(cmd,stdout=PIPE)   # 启动进程方式
        print("%s start successful" % self.name)
     
        
    def __getPid(self):
        p = Popen(["pidof",self.name],stdout=PIPE)  # 获取pid方式
        pid = p.stdout.read().strip()    # 过滤pid                 
        return pid
        
    def stop(self):
        pid = self.__getPid()
        if pid:
            os.kill(int(pid),15)         # 杀掉进程方式,pid为数值类型
            if os.path.exists(self.__pidFile()):
                os.remove(self.__pidFile())     # 删掉pid文件
            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 not running" % self.name)
    
            
    def help(self):
        print ("Usage: %s {start|stop|restart|status}" % __file__)
     
        
def main():
    name = "memcached"
    program = "/data/program/memcached/bin/memcached"
    workdir = "/var/tmp/memcached"
    
    pm = Process(name = name,
                 program = program,
                 workdir = workdir)    # 传参,也可以按顺序只写实参
    try:
        cmd = sys.argv[1]  # 如启动参数有误,则抛出异常,并退出
   
    except Exception as e:
        raise e
        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()
时间: 2024-10-11 10:03:46

python—memcached启动脚本的相关文章

Python编写的memcached启动脚本

Python编写memcached启动脚本 一.rc 脚本的start.stop.restart.status方法 #/usr/bin/env python # -*- coding:utf-8 -*- # @time   :2018/1/12 19:11 # @Author :FengXiaoqing # @file   :rc.py import os import sys from subprocess import Popen,PIPE class Process(object):   

Python中的类方法及属性总结举例,编写memcached启动脚本举例

1.类的属性总结类属性,也是公有属性, 类的私有属性, 对象的共有属性, 对象的私有属性, 内置属性, 函数的局部变量, 全局变量, #/usr/bin/env python # -*- coding:utf-8 -*- class MyClass(object): var1 = '类属性,类的公有属性 var1' __var2 = '类的私有属性 __var2' def func1(self): self.var3 = '对象的公有属性 var3' self.__var4 = '对象的私有属性

Python - 利用python编写的memcached启动脚本

memcached作为缓存文件服务,默认是操作系统里面是可以直接yum -y install memcached进行安装的. /etc/init.d/memcached 是属于系统shell编写的管理脚本,下面这个脚本是python脚本编写出来的memcached管理脚本,和shell编写的脚本实现的效果一样. #!/usr/bin/python import sys import os from subprocess import Popen,PIPE class Process(object

Memcached启动脚本

假设memcached安装在/home/www/memcached目录 # cd /home/www/memcached # vi start.sh start.sh内容如下: bin/memcached -d -m 10240 -p 11211 -l 192.168.20.102  -c 1024 -u root -P /home/www/memcached/memcached.pid #chmod 755 start.sh 用脚本启动nginx # cd /home/www/memcache

Memcached 启动脚本

#!/usr/bin/env python import sys import os from subprocess import Popen, PIPE class Process(object): '''memcached rc script''' args = {'USER': 'memcached', 'PORT': 11211, 'MAXCONN': 1024, 'CACHESIZE': 64, 'OPTIONS': ''} def __init__(self, name, progr

ubuntu下memcached启动停止脚本

工作需求,需要自己写一个memcached的启动停止脚本,呕心沥血,终于完成,虽然很搓很搓,还是记录一下吧,废话不多说直接上脚本 #! /bin/sh # ckconfig: - 55 45 # description: The memcached daemon is a network memory cache service. # processname: memcached # config: /etc/memcached.conf # Source function library -

python   memcached

管理服务  start   stop  status  restart 启动脚本 name memcached program  /usr/bin/memcached pidfile args #参数  -u -p -m -c work-dir python -m SimpleHTTPServer #启动一个小型的web服务 函数 pass占位 脚本名称+num  直接进入num行 pidof  memcached  查看进程num 读成字典 lines列表变成字典 dict([i.strip(

python 获取启动参数

pytho软件编写过程中,会经常使用带参数的启动脚本,这里记载下如何获取输入的参数. 使用sys.argv可获取启动时输入的所有参数,这个是数组,直接使用[]就可以获取,[0]代表的是启动文件时输入的名称, 举个例子,如果启动时输入./main.py,那运行时[0]就是./main.py,如果启动输入的是/root/python/main.py,那[0]就是/root/python/main.py. 如果启动时附加了其他的启动参数,就从[1]开始读取就好了. import sys import

HAProxy服务启动脚本

HAProxy是一个开源的.高性能的.基于TCP(第四层)和HTTP(第七层)应用的负载均衡软件,借助HAProxy可以快速.可靠地提供基于TCP和HTTP应用的负载均衡解决方案. 显著优点: 可靠性和稳定性非常好,可以与硬件级的F5负载均衡设备相媲美: 最高可以同时维护40 000~50 000个并发连接,单位时间处理的最大请求数为20 000个,最大数据处理能力可达10Gbps 支持多于8种负载均衡算法,同时也支持session(会话)保持. 支持虚拟主机功能,这样实现web负载均衡更加灵活