使用 python 实现 memcached 的启动服务脚本 rc
#!/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的更多相关文章
- (转) CentOS 7添加开机启动服务/脚本
CentOS 7添加开机启动服务/脚本 原文:http://blog.csdn.net/wang123459/article/details/79063703 一.添加开机自启服务 在CentOS 7 ...
- linux 下如何安装memcached 和启动服务
一.安装gcc # yum -y install gcc 二.安装libevent # wget http://www.monkey.org/~provos/libevent-2.0.12-stabl ...
- 编写使用systemctl启动服务脚本
CentOS 7的服务systemctl脚本存放在:/usr/lib/systemd/,有系统(system)和用户(user)之分,像需要开机不登陆就能运行的程序,还是存在系统服务里吧,即:/usr ...
- 【centos7】添加开机启动服务/脚本
一.添加开机自启服务 在centos7中添加开机自启服务非常方便,只需要两条命令(以Jenkins为例): systemctl enable jenkins.service #设置jenkins服务为 ...
- centos7之添加开机启动服务/脚本
一.添加开机启动脚本 #!/bin/bash # THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES # # It is highly advisable to ...
- centos7如何添加开机启动服务/脚本
一.添加开机自启服务 在centos7中添加开机自启服务非常方便,只需要两条命令(以Jenkins为例): systemctl enable jenkins.service #设置jenkins服务为 ...
- CentOS7添加开机启动服务/脚本(延用CentOS6方法)
一.添加开机自启服务 在centos7中添加开机自启服务非常方便,只需要两条命令(以Jenkins为例): systemctl enable jenkins.service #设置jenkins服务为 ...
- CentOS 7添加开机启动服务/脚本
一.添加开机自启服务 在CentOS 7中添加开机自启服务非常方便,只需要两条命令(以 jenkins 为例):systemctl enable jenkins.service #设置jenkins服 ...
- Linux—添加开机启动(服务/脚本)
系统启动时需要加载的配置文件 /etc/profile./root/.bash_profile/etc/bashrc./root/.bashrc/etc/profile.d/*.sh./etc/pro ...
随机推荐
- Scala 中下划线的用途
转载自:https://my.oschina.net/leejun2005/blog/405305 Scala 作为一门函数式编程语言,对习惯了指令式编程语言的同学来说,会不大习惯,这里除了思维方式之 ...
- WPF老矣,尚能饭否——且说说WPF今生未来(中):策略
本文接上文<WPF老矣,尚能饭否——且说说WPF今生未来(上):担心>继续. “上篇”中部分精彩的点评: 虽然WPF不再更新了,但是基于WPF的技术还是在发展着,就比如现在的WinRT,只 ...
- asp.net留言板项目源代码下载
HoverTree是一个asp.net开源项目,实现了留言板功能. 前台体验网址:http://hovertree.com/guestbook/ 后台请下载源代码安装. 默认用户名:keleyi 默认 ...
- 委托 lambda表达式浅显理解
方法不能跟变量一样当参数传递,怎么办,C#定义了委托,就可以把方法当变量一样传递了,为了简单,匿名方法传递,省得再声明方法了:再简单,lambda表达式传递,比匿名方法更直观. public dele ...
- iOS学习笔记——键盘处理
在网上找到的资料比较零散,这部分学起来感觉也有点空虚,内容就只包括隐藏键盘和键盘高度两部分 隐藏键盘其实就在我学习iOS开发的第一个程序里面已经实践过了,不过当时还懵懵懂懂,现在就了解了是什么一回事, ...
- C#+arcengine10.0+SP5实现鹰眼(加载的是mdb数据库中的数据)
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- Java03
字符输入 Scanner scan = new Scanner(System.in); char ch = scan.next().charAt(0); 车到路口例 package C ...
- 【一次面试】再谈javascript中的继承
前言 面向对象编程是每次面试必问的知识点,而前端js如何实现继承每次命中率高达80% 这不,近两天我们面试时候,同事就问道面试者此问题,但是,不论之前自己做的回答,还是面试者的回答,基本都不太令人满意 ...
- CSS :first-child 选择器 和 HTML DOM firstChild 属性
CSS 选择器参考手册 实例 选择属于其父元素的首个子元素的每个 <p> 元素,并为其设置样式: p:first-child { background-color:yellow; } 亲自 ...
- iOS 线程安全之@synchronized的用法
@synchronized(self)的用法: @synchronized 的作用是创建一个互斥锁,保证此时没有其它线程对self对象进行修改.这个是objective-c的一个锁定令牌,防止self ...