使用 python 实现 memcached 的启动服务脚本 rc

简介:   #!/usr/bin/python #coding:utf-8 import sys import os from subprocess import Popen, PIPE class Memcached(object): ''' memcached r...

 

 

#!/usr/bin/python
#coding:utf-8

import sys
import os
from subprocess import Popen, PIPE

class Memcached(object):
    ''' memcached rc script '''
    args = {'USER':'memcached', 'PORT':11211, 'MAXCONN':1024, 'CACHESIZE':64, 'OPTIONS':''}

    def __init__(self, name, program, workdir):
        self.name = name
        self.program = program
        #self.args = args
        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']
        options = ['-u', self.args['USER'],
                   '-p', self.args['PORT'],
                   '-m', self.args['CACHESIZE'],
                   '-C', self.args['MAXCONN']]
        os.system('chown %s %s' % (self.args['USER'], self.workdir))
        ''' 这个地方要修改工作目录的权限,用户为memcached,需要有写目录的权限。 '''
        return options

    def start(self):
        pid = self._getPid()
        if pid:
            print '%s is running...' % self.name
            sys.exit()

        self._init()
        cmd = [self.program] + self._parseArgs() + ['-d', '-P', self._pidFile()]
        print cmd
        p = Popen(cmd, stdout = PIPE)
        #self.pid = p.pid
        #self._writePid()
        # 如果程序选项中有-P选项,那么应用程序会自动去写pid文件,不用手动去写,而且要注意pid与手动写入的pid有何区别。
        print '%s start Sucessful' % 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 already running' % self.name
        else:
            print '%s is not running' % self.name    

    def help(self):
        print 'Usage: %s {start|stop|status|restart}' % __file__

def main():
    name = 'memcached'
    prog = '/usr/bin/memcached'
    #args = '-u nobody -p 11211 -c 1024 -m 64'
    wdir = '/var/tmp/memcached'

    rc = Memcached(name, prog, wdir)
    try:
        cmd = sys.argv[1]
    except IndexError, e:
        print "Option error"
        sys.exit()

    if cmd == 'start':
        rc.start()
    elif cmd == 'stop':
        rc.stop()
    elif cmd == 'restart':
        rc.restart()
    elif cmd == 'status':
        rc.status()
    else:
        rc.help()

if __name__ == '__main__':
    main()

  

相关文章
|
25天前
|
安全 Linux 网络安全
利用Python脚本自动备份网络设备配置
通过本文的介绍,我们了解了如何利用Python脚本自动备份网络设备配置。该脚本使用 `paramiko`库通过SSH连接到设备,获取并保存配置文件。通过定时任务调度,可以实现定期自动备份,确保网络设备配置的安全和可用。希望这些内容能够帮助你在实际工作中实现网络设备的自动化备份。
51 14
|
2月前
|
Python
自动化微信朋友圈:Python脚本实现自动发布动态
本文介绍如何使用Python脚本自动化发布微信朋友圈动态,节省手动输入的时间。主要依赖`pyautogui`、`time`、`pyperclip`等库,通过模拟鼠标和键盘操作实现自动发布。代码涵盖打开微信、定位朋友圈、准备输入框、模拟打字等功能。虽然该方法能提高效率,但需注意可能违反微信使用条款,存在风险。定期更新脚本以适应微信界面变化也很重要。
212 61
|
2月前
|
数据挖掘 vr&ar C++
让UE自动运行Python脚本:实现与实例解析
本文介绍如何配置Unreal Engine(UE)以自动运行Python脚本,提高开发效率。通过安装Python、配置UE环境及使用第三方插件,实现Python与UE的集成。结合蓝图和C++示例,展示自动化任务处理、关卡生成及数据分析等应用场景。
178 5
|
2月前
|
数据采集 存储 监控
21个Python脚本自动执行日常任务(2)
21个Python脚本自动执行日常任务(2)
128 7
21个Python脚本自动执行日常任务(2)
|
2月前
|
Android开发 开发者 Python
通过标签清理微信好友:Python自动化脚本解析
微信已成为日常生活中的重要社交工具,但随着使用时间增长,好友列表可能变得臃肿。本文介绍了一个基于 Python 的自动化脚本,利用 `uiautomator2` 库,通过模拟用户操作实现根据标签批量清理微信好友的功能。脚本包括环境准备、类定义、方法实现等部分,详细解析了如何通过标签筛选并删除好友,适合需要批量管理微信好友的用户。
106 7
|
8月前
|
缓存 Java Spring
SpringBoot配置第三方专业缓存技术Memcached 下载 安装 整合测试 2024年5000字详解
SpringBoot配置第三方专业缓存技术Memcached 下载 安装 整合测试 2024年5000字详解
62 0
|
9月前
|
Linux Memcache
Linux - 安装memcached
Linux - 安装memcached
127 0
Linux - 安装memcached
|
Docker 容器
Docker下安装memcached
Docker下安装memcached
207 0
|
Shell C语言
脚本用源码来安装 memcached 服务器
脚本用源码来安装 memcached 服务器
62 1
|
Java 程序员
【memcached】下载、安装、、出错一分钟全搞定
【memcached】下载、安装、、出错一分钟全搞定
259 0

热门文章

最新文章

推荐镜像

更多