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

Python腳本實現(xiàn)集群檢測和管理功能

 更新時間:2015年03月06日 10:21:28   投稿:junjie  
這篇文章主要介紹了Python腳本實現(xiàn)集群檢測和管理功能,本文講解了實現(xiàn)想法、開發(fā)工具選擇、經(jīng)驗分享、代碼示例等內(nèi)容,需要的朋友可以參考下

場景是這樣的:一個生產(chǎn)機房,會有很多的測試機器和生產(chǎn)機器(也就是30臺左右吧),由于管理較為混亂導(dǎo)致了哪臺機器有人用、哪臺機器沒人用都不清楚,從而產(chǎn)生了一個想法--利用一臺機器來管理所有的機器,記錄設(shè)備責(zé)任人、設(shè)備使用狀態(tài)等等信息....那么,為什么選擇python,python足夠簡單并且擁有豐富的第三方庫的支持。

最初的想法

  由于剛參加工作不久,對這些東西也都沒有接觸過,輪崗到某個部門需要做出點東西來(項目是什么還沒情況,就要做出東西來,沒辦法硬著頭皮想點子吧)。。。

  本想做一個簡單點的自動化測試的工具,但這項目的測試方法和測試用例暫時不能使用這種通用的測試手段(輸入和輸出都確定不了),從而作罷...

  那么做點什么東西,經(jīng)常發(fā)現(xiàn)同事們問208誰用的?201誰用的?那IP是我的!?。∧闶遣皇前盐业镁W(wǎng)線給拔掉了?242那機器到底是哪臺?

  突然間,春天來了,是不是可以做一個系統(tǒng)用來檢測IP和記錄設(shè)備的使用人,甚至可以按需要在某臺設(shè)備上運行一個腳本或命令?把這個矮矬窮的想法和leader溝通過后,確認可以做,那么就開始吧?。?!

設(shè)計思想

  該系統(tǒng)的大概思想:

  1.  要獲得所有服務(wù)器的各種信息,需要在任意一臺服務(wù)器上部署一個agent作為信息獲取的節(jié)點,定時向管理服務(wù)器節(jié)點發(fā)送服務(wù)器信息數(shù)據(jù)。
  2.  server作為綜合管理節(jié)點,接收并儲存agent提交的信息。
  3.  為了方便使用,采用web頁面的形式做展示。

開發(fā)工具選擇

  1. 開發(fā)語言:python
    之所以選擇python,簡單,第三方庫豐富,不用造輪子
  2. 數(shù)據(jù)庫:mysql
    簡單、易用
  3. webpy:web框架
    入門簡單、部署方便
  4. bootstrap:前端框架
    不要關(guān)心太多前端問題
  5. paramiko:python庫,遵循SSH2協(xié)議,支持以加密和認證的方式,進行遠程服務(wù)器的連接
    通過SSH方式連接agent服務(wù)器:遠程運行命令、傳輸文件
  6. scapy: python庫,可用來發(fā)送、嗅探、解析和偽造網(wǎng)絡(luò)數(shù)據(jù)包,這里用來掃描IP
  7. MySQLdb: 連接mysql
  8. shell 和 python腳本接口: 為其他人提供shell腳本的接口

經(jīng)驗分享

  1. 前端對我來說是新東西,從來沒弄過,頁面的動畫效果,腳本運行時的過渡都是需要考慮的,開始考慮利用倒計時,但是這個時間是不可控的,后來采用ajax來處理這個問題
  2. agent要自動部署到每臺機器,并可以通過server來控制刷新時間
  3. 建立一個可擴展的表是非常重要的,而且一些重要的信息需要寫入磁盤,在數(shù)據(jù)庫失效的情況下,可以從磁盤獲取數(shù)據(jù)
  4. 數(shù)據(jù)庫的連接,如果長時間沒有操作的話會超時,要考慮到
  ... ...

  項目結(jié)構(gòu)--webpy

    1. website.py為webpy的主程序,設(shè)置了url映射
    2. model.py為webpy的url映射類,處理請求和返回
    3. static中存放靜態(tài)資源
    4. scripts用來存放處理的腳本,這里起的名字有些問題

連接數(shù)據(jù)庫

 使用MyQSLdb連接mysql,在這里我沒有使用webpy提供的數(shù)據(jù)庫接口,而是自己封裝了一套  

ssh遠程連接服務(wù)器  

 paramiko實現(xiàn)ssh連接、與數(shù)據(jù)傳輸、執(zhí)行命令和腳本

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

def executecmd(cmd, host, port=22, user='root', passwd='root'):
    try:
        s = paramiko.SSHClient()
        s.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    s.connect(host, port, user, passwd, timeout = 10)
    except Exception as e:
        s.close()
        print e
        print 'connet error...'
        return

    try:
        stdin,stdout,stderr=s.exec_command(cmd)
        #print 'Host: %s......' %host
        res = stdout.readlines()
    except Exception as e:
        print 'exec_commmand error...'
    s.close()
    return res

def executefile(file, host, port=22, user='root', passwd='root'):
    try:
        s = paramiko.SSHClient()
        s.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    s.connect(host, port, user, passwd,timeout=5)
        t = paramiko.Transport((host, port))
        t.connect(username=user, password=passwd)
        sftp =paramiko.SFTPClient.from_transport(t)
    except Exception as e:
        s.close()
        print e
        print 'connet error...'
        return ''

    try:
        filename = os.path.basename(file)
        if filename.find('.sh') >= 0:
            sftp.put(path+'/'+file, '/tmp/tmp_test.sh')
            stdin,stdout,stderr=s.exec_command('sh /tmp/tmp_test.sh 2>/dev/null', timeout=5)
        else:
            sftp.put(path+'/'+file, '/tmp/tmp_test.py')
            stdin,stdout,stderr=s.exec_command('python /tmp/tmp_test.py', timeout=5)
        #stdin,stdout,stderr=s.exec_command('rm -rf /tmp/tmp_test* 2>/dev/null')
        res = stdout.readlines()
        s.exec_command('rm -rf /tmp/tmp_test* 2>/dev/null')
    except Exception as e:
        s.exec_command('rm -rf /tmp/tmp_test* 2>/dev/null')
        print 'timeout error...'
        print e
        return ''
    return res

IP掃描

使用scapy進行IP掃描

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

def pro(ip, cc, handle):
    global dict
    dst = ip + str(cc)
    packet = IP(dst=dst, ttl=20)/ICMP()
    reply = sr1(packet, timeout=TIMEOUT)
    if reply:
        print reply.src,' is online'
        tmp = [1, reply.src]
        handle.write(reply.src + '\n')
        #handle.write(reply.src+" is online"+"\n")
 
def main():
    threads=[]
    ip = '192.168.1.1'
    s = 2
    e = 254
    f=open('ip.log','w')
    for i in range(s, e):
        t=threading.Thread(target=pro,args=(ip,i,f))
        threads.append(t)
    print "main Thread begins at ",ctime()
    for t in threads :
        t.start()
    for t in threads :
        t.join()
    print "main Thread ends at ",ctime()

批量添加ssh-key

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

home_dir = '/home/xx'
id_rsa_pub = '%s/.ssh/id_rsa.pub' %home_dir

if not  id_rsa_pub:
    print 'id_rsa.pub Does not exist!'
    sys.exit(0)

file_object = open('%s/.ssh/config' %home_dir ,'w')
file_object.write('StrictHostKeyChecking no\n')
file_object.write('UserKnownHostsFile /dev/null')
file_object.close()


def up_key(host,port,user,passwd):
    try:
        s = paramiko.SSHClient()
    s.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    s.connect(host, port, user, passwd)

        t = paramiko.Transport((host, port))
        t.connect(username=user, password=passwd, timeout=3)
        sftp =paramiko.SFTPClient.from_transport(t)

        print 'create Host:%s .ssh dir......' %host
        stdin,stdout,stderr=s.exec_command('mkdir ~/.ssh/')
        print 'upload id_rsa.pub to Host:%s......' %host
        sftp.put(id_rsa_pub, "/tmp/temp_key")
        stdin,stdout,stderr=s.exec_command('cat /tmp/temp_key >> ~/.ssh/authorized_keys && rm -rf /tmp/temp_key')
        print 'host:%s@%s auth success!\n' %(user, host)
        s.close()
        t.close()
    except Exception, e:
        #import traceback
        #traceback.print_exc()
        print 'connect error...'
        print 'delete ' + host  + ' from database...'
        delip(host)
        #delete from mysql****
        try:
            s.close()
            t.close()
        except:
            pass

相關(guān)文章

  • python訪問mysql數(shù)據(jù)庫的實現(xiàn)方法(2則示例)

    python訪問mysql數(shù)據(jù)庫的實現(xiàn)方法(2則示例)

    這篇文章主要介紹了python訪問mysql數(shù)據(jù)庫的實現(xiàn)方法,結(jié)合實例形式分析了兩種Python操作MySQL數(shù)據(jù)庫的相關(guān)技巧,需要的朋友可以參考下
    2016-01-01
  • python函數(shù)的重新定義及練習(xí)

    python函數(shù)的重新定義及練習(xí)

    這篇文章主要為大家詳細介紹了python的函數(shù),使用python,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • win10下Python3.6安裝、配置以及pip安裝包教程

    win10下Python3.6安裝、配置以及pip安裝包教程

    下面小編就為大家?guī)硪黄獁in10下Python3.6安裝、配置以及pip安裝包教程。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • Python新手實現(xiàn)2048小游戲

    Python新手實現(xiàn)2048小游戲

    本文是一個Python新手編寫的熱門游戲2048的代碼,使用Python3編寫,基于控制臺,對于Python新手們熟悉Python語法非常有幫助,這里推薦給大家,希望大家能夠喜歡。
    2015-03-03
  • Python處理Excel表中單元格帶有換行的數(shù)據(jù)問題

    Python處理Excel表中單元格帶有換行的數(shù)據(jù)問題

    這篇文章主要介紹了Python處理Excel表中單元格帶有換行的數(shù)據(jù)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • tensorflow如何繼續(xù)訓(xùn)練之前保存的模型實例

    tensorflow如何繼續(xù)訓(xùn)練之前保存的模型實例

    今天小編就為大家分享一篇tensorflow如何繼續(xù)訓(xùn)練之前保存的模型實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • Python eval函數(shù)原理及用法解析

    Python eval函數(shù)原理及用法解析

    這篇文章主要介紹了Python eval函數(shù)原理及用法解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-11-11
  • pandas?dataframe按照列名給列排序三種方法

    pandas?dataframe按照列名給列排序三種方法

    這篇文章主要給大家介紹了關(guān)于pandas?dataframe按照列名給列排序的三種方法,在進行數(shù)據(jù)分析操作時,經(jīng)常需要對數(shù)據(jù)按照某行某列排序,或者按照多行多列排序,以及按照索引值排序等等,需要的朋友可以參考下
    2023-07-07
  • python使用pdfminer解析pdf文件的方法示例

    python使用pdfminer解析pdf文件的方法示例

    這篇文章主要介紹了python使用pdfminer解析pdf文件的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-12-12
  • Python如何輸出警告信息

    Python如何輸出警告信息

    這篇文章主要介紹了Python如何輸出警告信息,文中講解非常細致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07

最新評論

忻州市| 万年县| 平塘县| 博湖县| 洛浦县| 如东县| 益阳市| 上犹县| 汉寿县| 双桥区| 汕尾市| 长寿区| 衡南县| 夏津县| 德江县| 封开县| 聂荣县| 吉隆县| 荥经县| 庆安县| 正安县| 涞源县| 格尔木市| 庆安县| 玛沁县| 株洲县| 吐鲁番市| 安多县| 乐业县| 礼泉县| 七台河市| 宁阳县| 天峻县| 塘沽区| 河北区| 武城县| 遂溪县| 米脂县| 临潭县| 都匀市| 江北区|