使用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()
相關文章
- Memcached安裝及啟動指令碼指令碼
- shell編寫服務啟動指令碼指令碼
- centos 自動啟動指令碼和自啟動服務CentOS指令碼
- rsync的自動指令碼實現方案(非rsyncd服務)指令碼
- oracle10g_自動啟動服務指令碼Oracle指令碼
- shell指令碼監控啟動停止weblogic服務指令碼Web
- 使用 javassist 修改位元組碼實現 eureka-client 監聽服務啟動Javaclient
- Linux(CentOS)啟動時自動執行指令碼(rc.local)LinuxCentOS指令碼
- Oracle之 服務啟動&停止指令碼與開機自啟動(單例項)Oracle指令碼單例
- python實現自動搶課指令碼Python指令碼
- Windows下Oracle服務啟停bat指令碼WindowsOracleBAT指令碼
- 如何利用memcached和wcf實現一個快取服務快取
- 高可用服務之Keepalived利用指令碼實現服務的可用性檢測指令碼
- CentOS 7 - 配置服務實現開機自啟動CentOS
- SHELL指令碼實現Oracle自啟動與關閉指令碼Oracle
- 使用Memcached實現Session共享Session
- Centos7 啟動 python指令碼CentOSPython指令碼
- MongoDB服務端JavaScript指令碼使用方法MongoDB服務端JavaScript指令碼
- 利用Python實現自動掃雷小指令碼Python指令碼
- zabbix active 動作配置(當weblogic服務存在問題,執行指令碼重啟weblogic服務)Web指令碼
- Flask 原始碼剖析——服務啟動篇Flask原始碼
- ORACLE的啟動指令碼Oracle指令碼
- Python使用socket的UDP協議實現FTP檔案服務PythonUDP協議FTP
- 【python Flask】用uwsgi 啟動flask 服務方式PythonFlask
- shell之最常用的服務指令碼指令碼
- httpd啟動指令碼httpd指令碼
- thinkphp5使用Workerman啟動udp服務PHPUDP
- memcached程式埠監控指令碼指令碼
- oracle手動啟動服務Oracle
- 實現指令碼自動部署docker指令碼Docker
- Oracle自動備份指令碼的實現Oracle指令碼
- dataguard switchover的自動化指令碼實現指令碼
- SpringBoot Windows 自啟動 - 透過 Windows Service 服務實現Spring BootWindows
- Linux Default Bootup、Startup、Autoload Configuration file(自啟動服務指令碼)Linuxboot指令碼
- Slackware啟動指令碼與System V啟動指令碼的區別何在?(轉)指令碼
- Google 雲服務搭建 git服務,實現Hexo自動部署GoGitHexo
- 案例五:shell指令碼實現定時監控http服務的執行狀態指令碼HTTP
- 使用 Fastlane 實現 iOS 跟 Android 自動打包指令碼ASTiOSAndroid指令碼