最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python查看多臺(tái)服務(wù)器進(jìn)程的腳本分享

 更新時(shí)間:2014年06月11日 09:03:03   作者:  
這篇文章主要介紹了Python查看多臺(tái)服務(wù)器進(jìn)程的腳本分享,需要的朋友可以參考下

最近做自己開發(fā)用相關(guān)服務(wù)的一個(gè)checklist,就寫了這個(gè)腳本,用來在跳板機(jī)去檢查各個(gè)服務(wù)器上面的相關(guān)服務(wù)是否正常

使用expect登錄每個(gè)機(jī)器(因?yàn)榘踩珕栴},不能直接使用ssh信任),然后根據(jù)yaml文件的配置讀取服務(wù)名字以及啟動(dòng)的進(jìn)程數(shù)量 去檢查每個(gè)服務(wù)是否正常 PS:難點(diǎn)是沒有用端口轉(zhuǎn)發(fā)也只有普通用戶權(quán)限

checklist.py

復(fù)制代碼 代碼如下:

#coding=utf-8
import sys
#因?yàn)槲疫@個(gè)腳本要讓很多人能運(yùn)行,但是不能給他們看見我的密碼算法,所以是pyc
#我這個(gè)腳本要給很多其他普通用戶去用,是用我的ssh登錄操作,不能放在我的home目錄,所以放在tmp
sys.path.append('/tmp/local/lib/python2.6/site-packages/PyYAML-3.10-py2.6-linux-x86_64.egg') #依賴yaml
sys.path.append('/tmp/local/lib/python2.6/site-packages/pexpect-2.4-py2.6.egg') #依賴pexpect
import yaml
import pexpect
dataDict = yaml.load(open('/tmp/config.yaml')) #將我的yaml配置load進(jìn)來

def myprint(color,mes): #以前寫的一個(gè)終端彩色打印的函數(shù)
    '''使用ANSI控制碼終端顯示彩色'''
    d = dict(r=31, g=32, gb=36, y=33, b=34, p=35, o=37)
    color = "\x1B[%d;%dm" % (1, d[color])
    print "%s%s\x1B[0m" % (color, mes)

def main():
    list = ['g', 'b', 'y', 'gb', 'p']
    light = 0
    for k in dataDict:
        if k.startswith('bj-'):
        color = list[light%5] #根據(jù)服務(wù)器對(duì)顏色輪循
            SERVER = dataDict[k]
        #我這是使用了-F 是因?yàn)槲覜]有root權(quán)限不能修改hosts文件,但是我在config.yaml使用了別名,
        而這個(gè)定義就是自定義了sshconfig,默認(rèn)是~/.ssh/config
        child = pexpect.spawn('ssh -F /tmp/sshconfig dongwm@{0}'.format(SERVER['host']))
        #因?yàn)橛衅渌脩?,可能他還沒有鏈接過某服務(wù)器,最開始會(huì)讓你確認(rèn)服務(wù)器標(biāo)識(shí),需要點(diǎn)yes
        f = child.expect(['Password: ', 'password: ', 'continue connecting (yes/no)?'])
        if f == 2:
            #當(dāng)這個(gè)flag為2  表示那個(gè)用戶沒有登錄過某服務(wù)器
            child.sendline('yes')
            child.expect('password:')
            child.sendline('{0}'.format(mypasswd(SERVER['host']))) #mypasswd是加密我服務(wù)器權(quán)限的函數(shù),每個(gè)服務(wù)器密碼不同
        if f == 1:
            child.sendline('{0}'.format(mypasswd(SERVER['host'])))
        child.expect('~')
        for service in SERVER['service']:
        flag = 0
        #我在配置里面會(huì)加服務(wù),一般會(huì)指定服務(wù)的進(jìn)程數(shù)來對(duì)比是否正常
        if isinstance(service, dict):
            data =service.items()[0]
            service = data[0]
            num = data[1]
        else:
        #假如我在配置只指定服務(wù),不指定進(jìn)程數(shù),那么只要確定跑了進(jìn)程 不在乎進(jìn)程數(shù)
            num = 0
            flag = 1
            child.expect('~')
            child.sendline('ps -ef|grep {0}|grep -v grep|wc -l'.format(
            service))
            child.readline()
            #進(jìn)程數(shù)
            pro_num = child.readline().split('\r\n')[0]
        if int(pro_num) == num or flag:
            #進(jìn)程數(shù)符合配置標(biāo)注的數(shù)值
            myprint(color, '[{0}]  [{1}]  [{2}]  [{3}]'.format(k.center(12),
            SERVER['ip'].center(14), service.center(20), 'ok'.center(4)))
        else:
            myprint('r', '[{0}]  [{1}]  [{2}]  [{3}]  [{4}!={5}]'.format(k.center(12),
            SERVER['ip'].center(14), service.center(20), 'fail',
            pro_num, num))
        light += 1
            child.sendline('exit')

if __name__ == '__main__':
    main()

config.yaml 我這里只截取了其中一段

復(fù)制代碼 代碼如下:

bj-2:
  host: s233 #這個(gè)s233在sshconfig指定
  ip: XXX.XXX.XXX.233 #只是為了顯示出ip 好確認(rèn)
  service: #服務(wù)load后是一個(gè)列表
  #給XX用
  - nginx: 5
  - uwsgi: 25
  - supervisord: 1
  #給本機(jī)XX提供mysql服務(wù)
  - mysql: 3 #django
  #給本機(jī)XX提供XX
  - celery: 12
  #給本機(jī)XX提供XX
  - rabbitmq: 9
  - redis: 1
  - mongod: 2

相關(guān)文章

  • Python 中的函數(shù)裝飾器和閉包詳解

    Python 中的函數(shù)裝飾器和閉包詳解

    這篇文章主要介紹了Python 中的函數(shù)裝飾器和閉包詳解,需要的朋友可以參考下
    2021-02-02
  • 使用Python實(shí)現(xiàn)Mysql數(shù)據(jù)庫(kù)相關(guān)操作詳解

    使用Python實(shí)現(xiàn)Mysql數(shù)據(jù)庫(kù)相關(guān)操作詳解

    這篇文章主要介紹了使用Python實(shí)現(xiàn)Mysql數(shù)據(jù)庫(kù)相關(guān)操作詳解,pymysql是Python中操作數(shù)據(jù)庫(kù)的第三方模塊,通過這個(gè)模塊的相關(guān)方法,我們可以連接并且去操作mysql數(shù)據(jù)庫(kù),需要的朋友可以參考下
    2023-08-08
  • python3圖片文件批量重命名處理

    python3圖片文件批量重命名處理

    這篇文章主要為大家詳細(xì)介紹了Python3圖片文件批量重命名處理,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • Python根據(jù)給定模型進(jìn)行特征權(quán)值計(jì)算

    Python根據(jù)給定模型進(jìn)行特征權(quán)值計(jì)算

    在機(jī)器學(xué)習(xí)中,特征權(quán)重的計(jì)算是理解模型如何做出預(yù)測(cè)的重要步驟,本文將詳細(xì)介紹如何使用Python根據(jù)給定模型計(jì)算特征權(quán)重,希望對(duì)大家有一定的幫助
    2024-11-11
  • win10系統(tǒng)中安裝scrapy-1.1

    win10系統(tǒng)中安裝scrapy-1.1

    在win10的環(huán)境下安裝scrapy,并不能直接按照官網(wǎng)的手冊(cè)(http://doc.scrapy.org/en/1.0/intro/install.html)一次性安裝成功,根據(jù)我自己的安裝過程中遇到的問題,特意整理了一下安裝過程
    2016-07-07
  • python不同版本的_new_不同點(diǎn)總結(jié)

    python不同版本的_new_不同點(diǎn)總結(jié)

    在本篇內(nèi)容里小編給大家整理了一篇關(guān)于python不同版本的_new_不同點(diǎn)總結(jié)內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。
    2020-12-12
  • Python中魔法參數(shù)?*args?和?**kwargs使用詳細(xì)講解

    Python中魔法參數(shù)?*args?和?**kwargs使用詳細(xì)講解

    這篇文章主要介紹了Python中魔法參數(shù)?*args?和?**kwargs使用的相關(guān)資料,*args和**kwargs是Python中實(shí)現(xiàn)函數(shù)參數(shù)可變性的重要工具,分別用于接受任意數(shù)量的位置參數(shù)和關(guān)鍵字參數(shù),文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-12-12
  • Python3 log10()函數(shù)簡(jiǎn)單用法

    Python3 log10()函數(shù)簡(jiǎn)單用法

    在本文中我們給大家整理了關(guān)于Python3中l(wèi)og10()函數(shù)的基本用法和相關(guān)知識(shí)點(diǎn),需要的可以學(xué)習(xí)下。
    2019-02-02
  • Python RuntimeError: thread.__init__() not called解決方法

    Python RuntimeError: thread.__init__() not called解決方法

    這篇文章主要介紹了Python RuntimeError: thread.__init__() not called解決方法,需要的朋友可以參考下
    2015-04-04
  • python實(shí)現(xiàn)單例的兩種方法解讀

    python實(shí)現(xiàn)單例的兩種方法解讀

    這篇文章主要介紹了python實(shí)現(xiàn)單例的兩種方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03

最新評(píng)論

六盘水市| 包头市| 阜宁县| 大关县| 洛南县| 莱芜市| 黔西县| 乌鲁木齐市| 锦屏县| 兰坪| 临汾市| 陆良县| 山丹县| 温宿县| 泽普县| 民丰县| 沁水县| 辽阳市| 永济市| 高邑县| 合作市| 赤水市| 靖安县| 三门县| 永和县| 浦县| 阳江市| 靖江市| 鞍山市| 博乐市| 东阳市| 嵩明县| 汽车| 唐河县| 阿克陶县| 文化| 富民县| 嘉黎县| 万盛区| 房山区| 丰顺县|