#!/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()

  

使用 python 实现 memcached 的启动服务脚本 rc的更多相关文章

  1. (转) CentOS 7添加开机启动服务/脚本

    CentOS 7添加开机启动服务/脚本 原文:http://blog.csdn.net/wang123459/article/details/79063703 一.添加开机自启服务 在CentOS 7 ...

  2. linux 下如何安装memcached 和启动服务

    一.安装gcc # yum -y install gcc 二.安装libevent # wget http://www.monkey.org/~provos/libevent-2.0.12-stabl ...

  3. 编写使用systemctl启动服务脚本

    CentOS 7的服务systemctl脚本存放在:/usr/lib/systemd/,有系统(system)和用户(user)之分,像需要开机不登陆就能运行的程序,还是存在系统服务里吧,即:/usr ...

  4. 【centos7】添加开机启动服务/脚本

    一.添加开机自启服务 在centos7中添加开机自启服务非常方便,只需要两条命令(以Jenkins为例): systemctl enable jenkins.service #设置jenkins服务为 ...

  5. centos7之添加开机启动服务/脚本

    一.添加开机启动脚本 #!/bin/bash # THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES # # It is highly advisable to ...

  6. centos7如何添加开机启动服务/脚本

    一.添加开机自启服务 在centos7中添加开机自启服务非常方便,只需要两条命令(以Jenkins为例): systemctl enable jenkins.service #设置jenkins服务为 ...

  7. CentOS7添加开机启动服务/脚本(延用CentOS6方法)

    一.添加开机自启服务 在centos7中添加开机自启服务非常方便,只需要两条命令(以Jenkins为例): systemctl enable jenkins.service #设置jenkins服务为 ...

  8. CentOS 7添加开机启动服务/脚本

    一.添加开机自启服务 在CentOS 7中添加开机自启服务非常方便,只需要两条命令(以 jenkins 为例):systemctl enable jenkins.service #设置jenkins服 ...

  9. Linux—添加开机启动(服务/脚本)

    系统启动时需要加载的配置文件 /etc/profile./root/.bash_profile/etc/bashrc./root/.bashrc/etc/profile.d/*.sh./etc/pro ...

随机推荐

  1. 微信小程序探究

    前段时间比较流行的微信小程序,因为一直没有所谓内测码也没具体关注.拖到现在正好借组内分享的时机来仔细了解一下微信小程序.了解一个新的事物无外乎从是什么(本质),怎么用(具体用法),为什么用(优缺点)来 ...

  2. 【中文分词】简单高效的MMSeg

    最近碰到一个分词匹配需求--给定一个关键词表,作为自定义分词词典,用户query文本分词后,是否有词落入这个自定义词典中?现有的大多数Java系的分词方案基本都支持添加自定义词典,但是却不支持HDFS ...

  3. 分享一个UI与业务逻辑分层的框架(二)

    序言 第一篇讲解了UI与业务逻辑分层的框架(UIMediator)的使用.本篇将说明该框架的原理及代码实现. 整体结构 UI与后台类绑定主要分为UI输入->后台属性,后台属性-UI更新两部分,为 ...

  4. C#在winform中调用系统控制台输出

    在Winform程序中有时候调试会通过Console.Write()方式输出一些信息,这些信息是在Visual Studio的输出窗口显示. 所以就会想,能不能调用系统的Cmd窗口输出呢,经过一番查阅 ...

  5. customErrors与错误页面

    本配置节相对简单而且常用 <customErrors defaultRedirect="url" mode="On|Off|RemoteOnly"> ...

  6. 纯css3手机页面图标样式代码

    全部图标:http://hovertree.com/texiao/css/19/ 先看效果: 或者点这里:http://hovertree.com/texiao/css/19/hoverkico.ht ...

  7. Web.config配置数据库连接

    web.config配置数据库连接   第一种:取连接字符串 string connString = System.Web.Configuration.WebConfigurationManager. ...

  8. Android Studio创建AVD

    Android Studio是专门为Android开发设计的IDE,比Eclipse开发Android更加方便.快捷. 安装Android Studio以后,想运行AVD,出现了下面的错误: 提示没有 ...

  9. [moka同学摘录]SQL内联、外联的简单理解

    (源自:http://blog.csdn.net/kkk9127/article/details/1487686) --查询分析器中执行:--建表table1,table2:create table ...

  10. 天津政府应急系统之GIS一张图(arcgis api for flex)讲解(六)地图搜索模块

    config.xml文件的配置如下: <widget label="地图搜索" icon="assets/images/emergency_resource_ove ...