天天看點

python 實作實時監控snapshot 狀态

#!/usr/bin/env python 

#-*-coding:utf8-*-

#實時監控snapshot 狀态,如果網絡 出現異常,直接重置snapshot 狀态~

“”

建立snapshot 盤

qemu-img create -b root.img -f qcow2 root.qcow2 

snapshot 建立

virtsh snapshot-create-as  vm200001 vm200012

snapshot 重置

virsh snapshot-revert vm200001 vm2000012

”“

import  socket

import os,sys,time

import shutil

class Revert(object):

    def __init__ (self):

        pass

    def log(self,info):

        files = open('/var/log/listen.log','a')

        try:

            files.write(info)

        except IOError:

            files.close() 

        files.close()

        size = os.path.getsize('/var/log/listen.log') / 1024

        if size >= 1024:

            shutil.move('/var/log/listen.log','/dev/null')

    def mysock(self):

        while True:

            asock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

            asock.settimeout(10)

            try:

                asock.connect(('192.168.10.130',22))

                asock.close()

                time.sleep(3)

                self.log('%s:--: connect done \n'%(time.ctime()))

            except socket.timeout,e:

                self.log('%s:--: connect false:%s \n'%(time.ctime(),e))

                os.system('virsh snapshot-revert vm200001 vm2000012')

if __name__ == "__main__":

    pid = os.fork()

    if pid > 0 :

        sys.exit(0)

    os.setsid()

    os.chdir('/')

    sys.stdin = open("/dev/null","r+")

    sys.stdout = os.dup(sys.stdin.fileno())

    sys.stderr = os.dup(sys.stdin.fileno())

    reset = Revert()

    reset.mysock()

   本文轉自 swq499809608 51CTO部落格,原文連結:http://blog.51cto.com/swq499809608/855237