设为首页 收藏本站
查看: 980|回复: 0

[经验分享] rc脚本控制memcached服务

[复制链接]

尚未签到

发表于 2018-12-25 14:04:39 | 显示全部楼层 |阅读模式
  [root@blackfox zhouyuyao]# cat rc.memcached2.py
  #!/usr/bin/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,
  'OPTION':''}
  def __init__(self, name, program, args, 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['MAXCONN'],
  '-c',self.args['CACHESIZE']]
  os.system("chown %s %s" % (self.args['USER'], self.workdir))
  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()
  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 runnning" % 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'
  wd = '/var/tmp/memcached'
  pm = Process(name = name,
  program = prog,
  args = args,
  workdir = wd)
  try:
  cmd = sys.argv[1]
  except IndexError, e:
  print "Option Error"
  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()
  





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-655773-1-1.html 上篇帖子: memcached缓存基本概念 下篇帖子: Nginx结合memcached实现LNMMP平台搭建
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表