介绍

    利用 python 书写了 memcached 的启动等一类操作
尽量的实现脚本的复用性,以及脚本的可扩展性,已达到一劳永逸的效果,
并且添加了 memcached 监控搭建

memcached 操作代码

#!/usr/bin/env python
# _*_coding:utf-8_*_
# Author: "Edward.Liu"
# Author-Email: lonnyliu@126.com import psutil
import argparse
import sys
import subprocess # 获取 Memcached 程序 pid~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def process_id():
pid = {} # 存放获取到的进程 ID 服务端口
for proc in psutil.process_iter(): # 迭代正在运行的运行的进程,进行排序
try:
pinfo = proc.as_dict(attrs=['pid', 'name', 'cmdline']) # 获取返回字符串的指定字段
except psutil.NoSuchProcess:
pass
else:
if pinfo.get('name') == 'memcached': # 通过字典获取指定的名称的进程
pid[pinfo.get('cmdline')[-1]] = pinfo.get('pid') # 将端口号与相应的进程 ID 关联存放到 pid{}
return pid # 选择停止单个或者全部端口~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def select_stop(parameter):
if bool(process_id()): # 判断 pid 字典是否为空
try: # 判断输入的是否为数字
int(parameter.port)
if parameter.port in process_id().keys():
print "\033[32m选择的端口为:%s" % parameter.port + "\n" + "\033[32m该端口的 PID:%s\033[0m" % process_id()[
parameter.port]
print "\033[31mStoping Memcached %s\033[0m" % parameter.port
process = psutil.Process(process_id()[parameter.port]) # 实例化该 PID 进程
process.terminate() # 停止该 pid 所指进程
try: # 判断停止是否成功
process_id()[parameter.port]
except KeyError:
print "\033[32mStop Memcached %s Sucessful\033[0m" % parameter.port + "!" * 20
else:
print "\033[31m输入的端口不存在\033[0m" + "!" * 20
except ValueError, err:
if parameter.port == 'all': # 当不输入数字是否于此相等
print "\033[32mStop All Memcached Process\033[0m" + "!" * 20
for key in process_id().keys():
process = psutil.Process(process_id()[key]) # 实例化该 PID 进程
process.terminate()
print "\033[32mStop Memcached %s Sucessful\033[0m" % key + "!" * 20 # 选择启动单个端口~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
else:
print "\033[Please Input Number Port\033[0m" + "!" * 20
else:
print "\033[31mNo Process Started\033[0m" # 选择启动单个或者多个端口~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def select_start(parameter):
"""
启动方法简介:
首先判断 -P 参数的类型
try 是数字
输入的参数存不存在已经启动的进程中
if 不在已启动中,进行启动
except 不是数字
是否 等于 'all' #全部启动11211-11215
判断进程时候存在 如果存在 不进行启动 如果不存在 进行启动
"""
# 获取参数
port = parameter.port
user = parameter.user
memcached_home = "/software/memcached" # 定义 Memcached_home目录
try:
int(port)
if port in process_id().keys():
print "\033[32mThis Port Is Started\033[0m"
else:
start_memcached = "%smemcached -c 512 -d -u %s -m 512 -p %s" % (memcached_home, user, port)
code = subprocess.Popen(start_memcached, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
out, sherr = code.communicate()
if code.returncode != 0:
print "\033[31mStart Memcached Ok\033[0m" + "!" * 20
print sherr
else:
print "\033[32mStart Memcached Ok Port:%s\033[0m" % port + "!" * 20
except ValueError, err:
if port == 'all':
if bool(process_id()):
print "\033[32mAll Port Is Started\033[0m"
else:
print "\033[32mStart Memcached All Port [11211-11215]\033[0m"
port_list = ['', '', '', '', '']
for i in port_list:
start_memcached = "%smemcached -c 512 -d -u %s -m 512 -p %s" % (memcached_home, user, i)
code = subprocess.Popen(start_memcached, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
out, err = code.communicate()
if code.returncode != 0:
print "\033[31mStart Memcached Failed\033[0m" + "!" * 20
print err
else:
print "\033[32mStart Memcached %s Ok\033[0m" % i + "!" * 20
else:
print "\033[31mPlease Input Number EG: -P 123456\033[0m" + "!" * 20 # 获取单个进程或者多个进程状态~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def select_status(parameter):
if str(parameter.port) in process_id().keys():
print "\033[32mMemcached的端口为:%s\033[0m" % str(
parameter.port) + "\n" + "*" * 20 + "\n" + "\033[32mMemcached端口的 PID:%s\033[0m" % \
process_id()[str(parameter.port)]
elif str(parameter.port) == 'all':
for s in process_id().keys():
print "-" * 40
print "\033[32mMemcached的端口为:%s\033[0m" % s + "\t" + "\033[32mMemcached端口的 PID:%s\033[0m" % process_id()[s]
else:
print "\033[32mMemcached端口为%s 不存在\033[0m" % str(parameter.port) def check_arg(self, args=None):
parser = argparse.ArgumentParser(description='Script to learn basic argparse')
parser.add_argument('-P', '--port', help="Memcached Port Or 'all' start[11211-11215]", required='True')
parser.add_argument('-u', '--user', help='User Name', default='root')
parser.add_argument('-t', '--action', help='Action start|stop|status', default='status') if len(sys.argv) <= 2:
parser.print_help()
sys.exit(1)
return parser.parse_args(args) if __name__ == '__main__':
args = check_arg(sys.argv[1:]) # 获取到去除脚本本身的所有参数
if args.action == 'status':
select_status(args)
elif args.action == 'start':
select_start(args)
elif args.action == 'stop':
select_stop(args)

memcached 监控

1.安装 Apache PHP 环境
2.解压phpMemcachedAdmin-1.2.2-r262.tar.gz 到 /var/www/html/memcached #安装包下载地址https://code.google.com/p/phpmemcacheadmin/
3.更改Apache 配置文件
/etc/httpd/conf.d/memcached.conf
<VirtualHost *:80>
ServerName 10.90.10.246 #服务器名称 或者 IP 地址
UseCanonicalName Off
ServerAdmin "10.90.10.246"
DocumentRoot "/var/www/html/memcached" #Memcached 监控项目存放的位置 此处需要注意下权限
CustomLog /var/log//httpd/10.90.10.246-access_log common
ErrorLog /var/log/httpd/10.90.10.246-error_log
</VirtualHost>
4.重启 Apache 访问:http://10.90.10.246
效果为:

												

Python Memcached Script的更多相关文章

  1. Python Memcached、Redis & RabbitMQ使用

    一.Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的 ...

  2. Python Tomcat Script(多实例)

    之前书写过 Tomcat 单实例的 Python 脚本,本次增加 Tomcat 多实例的操作脚本. 1:准备 安装所需 Python 插件 A方法: pip install argparse B方法: ...

  3. Python自动化 【第十一篇】:Python进阶-RabbitMQ队列/Memcached/Redis

     本节内容: RabbitMQ队列 Memcached Redis 1.  RabbitMQ 安装 http://www.rabbitmq.com/install-standalone-mac.htm ...

  4. Python操作memcached及redis

    Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...

  5. Python并发编程-Memcached (分布式内存对象缓存系统)

    一.Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的 ...

  6. python之Memcached 安装及操作

    一.Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的 ...

  7. python多种格式数据加载、处理与存储

    多种格式数据加载.处理与存储 实际的场景中,我们会在不同的地方遇到各种不同的数据格式(比如大家熟悉的csv与txt,比如网页HTML格式,比如XML格式),我们来一起看看python如何和这些格式的数 ...

  8. Python开源框架

    info:更多Django信息url:https://www.oschina.net/p/djangodetail: Django 是 Python 编程语言驱动的一个开源模型-视图-控制器(MVC) ...

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

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

随机推荐

  1. WampServer 给电脑搭建apache服务器和php环境

    WampServer 给电脑搭建apache服务器和php环境 前端不仅要做页面展示层,还负责着数据交互的部分,不要等到后端人员做好工作了前端才开始对接,那样太被动了. 前端在完成静态页面的编码后,就 ...

  2. 投票系统 & 简易js刷票脚本

    早就听说有什么刷票脚本,微博投票等等相关的投票都有某些人去刷票. 试一下吧,兴许自己也会刷票呢?捣鼓了几个小时,终于有所眉目. (1)投票系统 要刷票,就得先有个投票界面. 当然,可以直接去各个投票网 ...

  3. 译:在ASP.NET MVC5中如何使用Apache log4net 类库来记录日志

    译文出处:http://www.codeproject.com/Articles/823247/How-to-use-Apache-log-net-library-with-ASP-NET-MVC 在 ...

  4. [水煮 ASP.NET Web API2 方法论](3-5)路由约束

    问题 怎么样限制路由中参数的值. 解决方案 ASP.NET WEB API 允许我们通过 IHttpRouteConstraint 接口设置路由约束.集中式路由和直接式路由都可以使用 IHttpRou ...

  5. Uxf框架引入Rest控制器特性

    引入Rest风格接口的特性,主要是为了适应平台化和移动化开发的需要. 移植自ThinkPHP项目的RestAction. REST(Representational State Transfer表述性 ...

  6. 利用PBFunc在Powerbuilder中解析Json对象

    利用PBFunc工具在Powerbuilder解析json,只需要调用getattribute方法来获取 解析unicode格式的json: n_pbfunc_json lnv_json lnv_js ...

  7. WEB前端开发和调试的工具

    前端开发在线课程: http://yun.lu/student/course/list/8   1.HBuilder:WEB开发IDE工具 hbulider,内核是eclipse,Dcloud公司出品 ...

  8. Linux下安装配置Nexus

    一.安装和运行nexus 1.下载nexus:http://www.sonatype.org/nexus/go 可选择tgz和zip格式,以及war,选择tgz或zip时不同版本可能在启动时存在一定问 ...

  9. jdk1.8 J.U.C之FutureTask实现机制分析

    我画了一张关于FutureTask的类图,主要包括FutureTask的几个重要的函数和字段,还有它和父类的关系. 根据上面图我们可以清晰的看出FutureTask的继承关系.FutureTask继承 ...

  10. Android从零开始——Android开发环境的安装

    Android开发环境的安装 1 IDE Android可以使用开发的IDE有Eclipse 或者 Android Studio.Android Studio还处于v 0.1.x版本,是early a ...