天天看點

Python編寫的memcached啟動腳本

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