Python编写memcached启动脚本
测试环境:CentOS 7
Python版本: 2.7
安装memcached:输入下面命令安装并用脚本测试
1
<code>yum install </code><code>-</code><code>y memcached libmemcached libevent</code>
测试方法:把脚本内容粘贴到rc.py文件中,shell下运行如果下命令:
<code>python rc.py start</code>
一、rc 脚本的start、stop、restart、status方法
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
<code>#/usr/bin/env python</code>
<code># -*- coding:utf-8 -*-</code>
<code># @time :2018/1/12 19:11</code>
<code># @Author :FengXiaoqing</code>
<code># @file :rc.py</code>
<code>import</code> <code>os</code>
<code>import</code> <code>sys</code>
<code>from</code> <code>subprocess </code><code>import</code> <code>Popen,PIPE</code>
<code>class</code> <code>Process(</code><code>object</code><code>):</code>
<code> </code><code>'''memcached rc script'''</code>
<code> </code><code>def</code> <code>__init__(</code><code>self</code><code>,name,program,args,workdir):</code>
<code> </code><code>self</code><code>.name </code><code>=</code> <code>name</code>
<code> </code><code>self</code><code>.program </code><code>=</code> <code>program</code>
<code> </code><code>self</code><code>.args </code><code>=</code> <code>args</code>
<code> </code><code>self</code><code>.workdir </code><code>=</code> <code>workdir</code>
<code> </code><code>def</code> <code>_init(</code><code>self</code><code>):</code>
<code> </code><code>'''/var/tmp/memcached'''</code>
<code> </code><code>if</code> <code>not</code> <code>os.path.exists(</code><code>self</code><code>.workdir):</code>
<code> </code><code>os.mkdir(</code><code>self</code><code>.workdir)</code>
<code> </code><code>os.chdir(</code><code>self</code><code>.workdir)</code>
<code> </code><code>def</code> <code>_pidFile(</code><code>self</code><code>):</code>
<code> </code><code>'''/var/tmp/memcached/memcached.pid'''</code>
<code> </code><code>return</code> <code>os.path.join(</code><code>self</code><code>.workdir,</code><code>"%s.pid"</code> <code>%</code> <code>self</code><code>.name)</code>
<code> </code><code>def</code> <code>_writhPid(</code><code>self</code><code>):</code>
<code> </code><code>if</code> <code>self</code><code>.pid:</code>
<code> </code><code>with </code><code>open</code><code>(</code><code>self</code><code>._pidFile(),</code><code>'w'</code><code>) as fd:</code>
<code> </code><code>fd.write(</code><code>str</code><code>(</code><code>self</code><code>.pid))</code>
<code> </code><code>def</code> <code>start(</code><code>self</code><code>):</code>
<code> </code><code>pid </code><code>=</code> <code>self</code><code>._getPid()</code>
<code> </code><code>if</code> <code>pid:</code>
<code> </code><code>print</code> <code>"%s is already runnig..."</code> <code>%</code> <code>self</code><code>.name</code>
<code> </code><code>sys.exit()</code>
<code> </code><code>self</code><code>._init()</code>
<code> </code><code>cmd </code><code>=</code> <code>self</code><code>.program </code><code>+</code> <code>' '</code> <code>+</code> <code>self</code><code>.args</code>
<code> </code><code>p </code><code>=</code> <code>Popen(cmd,stdout</code><code>=</code><code>PIPE,shell</code><code>=</code><code>True</code><code>)</code>
<code> </code><code>self</code><code>.pid </code><code>=</code> <code>p.pid</code>
<code> </code><code>self</code><code>._writhPid()</code>
<code> </code><code>print</code> <code>"%s start Sucessful.."</code> <code>%</code> <code>self</code><code>.name</code>
<code> </code><code>def</code> <code>_getPid(</code><code>self</code><code>):</code>
<code> </code><code>p </code><code>=</code> <code>Popen([</code><code>'pidof'</code><code>,</code><code>self</code><code>.name],stdout </code><code>=</code> <code>PIPE)</code>
<code> </code><code>pid </code><code>=</code> <code>p.stdout.read().strip()</code>
<code> </code><code>return</code> <code>pid</code>
<code> </code><code>def</code> <code>stop(</code><code>self</code><code>):</code>
<code> </code><code>os.kill(</code><code>int</code><code>(pid),</code><code>15</code><code>)</code>
<code> </code><code>if</code> <code>os.path.exists(</code><code>self</code><code>._pidFile()):</code>
<code> </code><code>os.remove(</code><code>self</code><code>._pidFile())</code>
<code> </code><code>print</code> <code>(</code><code>"%s is stopped ."</code><code>) </code><code>%</code> <code>self</code><code>.name</code>
<code> </code><code>def</code> <code>restart(</code><code>self</code><code>):</code>
<code> </code><code>self</code><code>.stop()</code>
<code> </code><code>self</code><code>.start()</code>
<code> </code><code>def</code> <code>status(</code><code>self</code><code>):</code>
<code> </code><code>print</code> <code>"%s is already running..."</code> <code>%</code> <code>self</code><code>.name</code>
<code> </code><code>else</code><code>:</code>
<code> </code><code>print</code> <code>"%s is not running..."</code> <code>%</code> <code>self</code><code>.name</code>
<code> </code><code>def</code> <code>_help(</code><code>self</code><code>):</code>
<code> </code><code>print</code> <code>(</code><code>"Usage: %s {start|stop|status|restart}"</code><code>) </code><code>%</code> <code>__file__</code>
<code>def</code> <code>main():</code>
<code> </code><code>name </code><code>=</code> <code>'memcached'</code>
<code> </code><code>prog </code><code>=</code> <code>'/usr/bin/memcached'</code>
<code> </code><code>args </code><code>=</code> <code>'-u nobody -p 11211 -c 1024 -m 64'</code>
<code> </code><code>wd </code><code>=</code> <code>'/var/tmp/memcached'</code>
<code> </code><code>pm </code><code>=</code> <code>Process(name </code><code>=</code> <code>name,</code>
<code> </code><code>program</code><code>=</code><code>prog,</code>
<code> </code><code>args</code><code>=</code><code>args,</code>
<code> </code><code>workdir</code><code>=</code><code>wd)</code>
<code> </code><code>try</code><code>:</code>
<code> </code><code>cmd </code><code>=</code> <code>sys.argv[</code><code>1</code><code>]</code>
<code> </code><code>except</code> <code>IndexError,e:</code>
<code> </code><code>print</code> <code>(</code><code>"Option error"</code><code>)</code>
<code> </code><code>sys.exit()</code>
<code> </code><code>if</code> <code>cmd </code><code>=</code><code>=</code> <code>'start'</code><code>:</code>
<code> </code><code>pm.start()</code>
<code> </code><code>elif</code> <code>cmd </code><code>=</code><code>=</code> <code>'stop'</code><code>:</code>
<code> </code><code>pm.stop()</code>
<code> </code><code>elif</code> <code>cmd </code><code>=</code><code>=</code> <code>'restart'</code><code>:</code>
<code> </code><code>pm.restart()</code>
<code> </code><code>elif</code> <code>cmd </code><code>=</code><code>=</code> <code>'status'</code><code>:</code>
<code> </code><code>pm.status()</code>
<code> </code><code>else</code><code>:</code>
<code> </code><code>pm._help()</code>
<code>if</code> <code>__name__ </code><code>=</code><code>=</code> <code>'__main__'</code><code>:</code>
<code> </code><code>main()</code>
二、rc脚本的(以daemon方式启动)
98
99
100
101
102
103
104
105
<code># @time :2018/1/12 21:18</code>
<code># @file :rc-d.py</code>
<code> </code><code>args </code><code>=</code> <code>{</code><code>'USER'</code><code>:</code><code>'memcached'</code><code>,</code>
<code> </code><code>'PORT'</code><code>:</code><code>11211</code><code>,</code>
<code> </code><code>'MAXCONN'</code><code>:</code><code>1024</code><code>,</code>
<code> </code><code>'CACHESIZE'</code><code>:</code><code>64</code><code>,</code>
<code> </code><code>'OPTIONS'</code><code>: ''}</code>
<code> </code><code>def</code> <code>__init__(</code><code>self</code><code>,name,program,workdir):</code>
<code> </code><code>def</code> <code>_readConf(</code><code>self</code><code>,f):</code>
<code> </code><code>with </code><code>open</code><code>(f) as fd:</code>
<code> </code><code>lines </code><code>=</code> <code>fd.readlines()</code>
<code> </code><code>return</code> <code>dict</code><code>([i.strip().replace(</code><code>'"'</code><code>,'</code><code>').split('</code><code>=</code><code>') </code><code>for</code> <code>i </code><code>in</code> <code>lines])</code>
<code> </code><code>def</code> <code>_parseArgs(</code><code>self</code><code>):</code>
<code> </code><code>conf </code><code>=</code> <code>self</code><code>._readConf(</code><code>'/etc/sysconfig/memcached'</code><code>)</code>
<code> </code><code>if</code> <code>'USER'</code> <code>in</code> <code>conf:</code>
<code> </code><code>self</code><code>.args[</code><code>'USER'</code><code>] </code><code>=</code> <code>conf[</code><code>'USER'</code><code>]</code>
<code> </code><code>if</code> <code>'PORT'</code> <code>in</code> <code>conf:</code>
<code> </code><code>self</code><code>.args[</code><code>'PORT'</code><code>] </code><code>=</code> <code>conf[</code><code>'PORT'</code><code>]</code>
<code> </code><code>if</code> <code>'MAXCONN'</code> <code>in</code> <code>conf:</code>
<code> </code><code>self</code><code>.args[</code><code>'MAXCONN'</code><code>] </code><code>=</code> <code>conf[</code><code>'MAXCONN'</code><code>]</code>
<code> </code><code>if</code> <code>'CACHESIZE'</code> <code>in</code> <code>conf:</code>
<code> </code><code>self</code><code>.args[</code><code>'CACHESIZE'</code><code>] </code><code>=</code> <code>conf[</code><code>'CACHESIZE'</code><code>]</code>
<code> </code><code>options </code><code>=</code> <code>[</code><code>'-u'</code><code>,</code><code>self</code><code>.args[</code><code>'USER'</code><code>],</code>
<code> </code><code>'-p'</code><code>,</code><code>self</code><code>.args[</code><code>'PORT'</code><code>],</code>
<code> </code><code>'-m'</code><code>,</code><code>self</code><code>.args[</code><code>'MAXCONN'</code><code>],</code>
<code> </code><code>'-c'</code><code>,</code><code>self</code><code>.args[</code><code>'CACHESIZE'</code><code>]] </code>
<code> </code><code>return</code> <code>options</code>
<code> </code><code>cmd </code><code>=</code> <code>[</code><code>self</code><code>.program]</code><code>+</code><code>self</code><code>._parseArgs()</code><code>+</code><code>[</code><code>'-d'</code><code>,</code><code>'-P'</code><code>,</code><code>self</code><code>._pidFile()]</code>
<code> </code><code>p </code><code>=</code> <code>Popen(cmd,stdout</code><code>=</code><code>PIPE)</code>
<code> </code><code>def</code> <code>help</code><code>(</code><code>self</code><code>):</code>
<code> </code><code>pm.</code><code>help</code><code>()</code>
版权声明:原创作品,如需转载,请注明出处。否则将追究法律责任
本文转自 枫叶云 51CTO博客,原文链接:http://blog.51cto.com/fengyunshan911/2060427