Python查看多臺服務(wù)器進(jìn)程的腳本分享
最近做自己開發(fā)用相關(guān)服務(wù)的一個checklist,就寫了這個腳本,用來在跳板機(jī)去檢查各個服務(wù)器上面的相關(guān)服務(wù)是否正常
使用expect登錄每個機(jī)器(因?yàn)榘踩珕栴},不能直接使用ssh信任),然后根據(jù)yaml文件的配置讀取服務(wù)名字以及啟動的進(jìn)程數(shù)量 去檢查每個服務(wù)是否正常 PS:難點(diǎn)是沒有用端口轉(zhuǎn)發(fā)也只有普通用戶權(quán)限
checklist.py
#coding=utf-8
import sys
#因?yàn)槲疫@個腳本要讓很多人能運(yùn)行,但是不能給他們看見我的密碼算法,所以是pyc
#我這個腳本要給很多其他普通用戶去用,是用我的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): #以前寫的一個終端彩色打印的函數(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ù)器對顏色輪循
SERVER = dataDict[k]
#我這是使用了-F 是因?yàn)槲覜]有root權(quán)限不能修改hosts文件,但是我在config.yaml使用了別名,
而這個定義就是自定義了sshconfig,默認(rèn)是~/.ssh/config
child = pexpect.spawn('ssh -F /tmp/sshconfig dongwm@{0}'.format(SERVER['host']))
#因?yàn)橛衅渌脩?,可能他還沒有鏈接過某服務(wù)器,最開始會讓你確認(rèn)服務(wù)器標(biāo)識,需要點(diǎn)yes
f = child.expect(['Password: ', 'password: ', 'continue connecting (yes/no)?'])
if f == 2:
#當(dāng)這個flag為2 表示那個用戶沒有登錄過某服務(wù)器
child.sendline('yes')
child.expect('password:')
child.sendline('{0}'.format(mypasswd(SERVER['host']))) #mypasswd是加密我服務(wù)器權(quán)限的函數(shù),每個服務(wù)器密碼不同
if f == 1:
child.sendline('{0}'.format(mypasswd(SERVER['host'])))
child.expect('~')
for service in SERVER['service']:
flag = 0
#我在配置里面會加服務(wù),一般會指定服務(wù)的進(jìn)程數(shù)來對比是否正常
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 我這里只截取了其中一段
bj-2:
host: s233 #這個s233在sshconfig指定
ip: XXX.XXX.XXX.233 #只是為了顯示出ip 好確認(rèn)
service: #服務(wù)load后是一個列表
#給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
- python讀取注冊表中值的方法
- python進(jìn)程管理工具supervisor使用實(shí)例
- Python多進(jìn)程編程技術(shù)實(shí)例分析
- Python實(shí)現(xiàn)Linux下守護(hù)進(jìn)程的編寫方法
- python實(shí)現(xiàn)進(jìn)程間通信簡單實(shí)例
- 小結(jié)Python用fork來創(chuàng)建子進(jìn)程注意事項(xiàng)
- 使用python 獲取進(jìn)程pid號的方法
- python 多進(jìn)程通信模塊的簡單實(shí)現(xiàn)
- linux系統(tǒng)使用python監(jiān)控apache服務(wù)器進(jìn)程腳本分享
- 寫了個監(jiān)控nginx進(jìn)程的Python腳本
- python 判斷一個進(jìn)程是否存在
- python啟動辦公軟件進(jìn)程(word、excel、ppt、以及wps的et、wps、wpp)
- python修改注冊表終止360進(jìn)程實(shí)例
相關(guān)文章
Python表格數(shù)據(jù)處理庫之tablib庫詳解
這篇文章主要介紹了Python表格數(shù)據(jù)處理庫之tablib庫詳解,Tablib是一個用于處理電子表格數(shù)據(jù)的Python庫,它可以輕松地進(jìn)行數(shù)據(jù)的導(dǎo)入和導(dǎo)出,以及數(shù)據(jù)格式的轉(zhuǎn)換,需要的朋友可以參考下2023-08-08Python讀取Hive數(shù)據(jù)庫實(shí)現(xiàn)代碼詳解
這篇文章主要介紹了Python讀取Hive數(shù)據(jù)庫實(shí)現(xiàn)代碼,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03Python機(jī)器學(xué)習(xí)pytorch模型選擇及欠擬合和過擬合詳解
如何發(fā)現(xiàn)可以泛化的模式是機(jī)器學(xué)習(xí)的根本問題,將模型在訓(xùn)練數(shù)據(jù)上過擬合得比潛在分布中更接近的現(xiàn)象稱為過擬合,用于對抗過擬合的技術(shù)稱為正則化2021-10-10python實(shí)現(xiàn)蒙特卡羅模擬法的實(shí)踐
?蒙特卡洛就是產(chǎn)生隨機(jī)變量,帶入模型算的結(jié)果,尋優(yōu)方面,本文主要介紹了python 蒙特卡羅模擬法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03shell命令行,一鍵創(chuàng)建 python 模板文件腳本方法
下面小編就為大家分享一篇shell命令行,一鍵創(chuàng)建 python 模板文件腳本方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-03-03