rsync多线程备份脚本 --pytho

发布时间:2019-08-25 09:34:29编辑:auto阅读(1584)

    闲话少说,脚本奉上,希望对大家有帮助。

    #!/bin/env python
    #coding=utf8
    import os,sys,time,re,threading
    
    now=time.strftime('%Y%m%d')
    log_02='/tmp/tongbu_stats_%s.txt' % (now)
    
    # rsync  -t保持稳健时间细细
    #        -z对备份的文件传输中压缩处理
    #        -r对子目录进行递归处理
    #        -p保持file权限
    #        -l保持软连接
    dict_cmd={
    	'test1':'/usr/bin/rsync -tzrlp --stats /usr/local/src/2 /tmp/linshi',
    	'test2':'/usr/bin/rsync -tzrp --stats /usr/local/src/openfire /tmp/linshi0304'
    }
    
    def write_title(log_stat):
      file_log=open(log_stat,'a')
      file_log.write('strt_time,end_time,module,Number of files,Number of files transferred,Total file size(byte),Total transferred file size(byte)\n')
      file_log.close()
    
    def write_notes(cmd,log_stat,nam):
      fle=open(log_stat,'a')
      try:
        s_time=time.strftime('%H:%M:%S')
        cmd_put=os.popen(cmd)
        list_tmp=[]
        re_p=re.compile('(Number of files:|Number of files transferred:|Total file size:|Total transferred file size:) (\d+)?')
        for each_line1 in cmd_put:
          for each_line2 in re_p.finditer(each_line1):
            if each_line2 is not None:
              list_tmp.append(each_line2.group(2))
            else:
              pass
        e_time=time.strftime('%H:%M:%S')
        cmd_stat='%s,%s,%s,%s,%s,%s,%s,%s' % (s_time,e_time,nam,list_tmp[0],list_tmp[1],list_tmp[2],list_tmp[3],os.linesep)
        cmd_put.close()
        fle.write(cmd_stat)
      except:
        cmd_stat='%s,%s,%s,%s,%s,%s,%s,%s' % (s_time,e_time,nam,'error','error','error','error',os.linesep)
        fle.write(cmd_stat)
      fle.close()
    
    
    if __name__=='__main__':
      write_title(log_02)
      threads={}
      for i in dict_cmd:
        t=threading.Thread(target=write_notes,args=(dict_cmd[i],log_02,i))
        print 'exec',i
        threads[i]=t
      for i in dict_cmd:
        threads[i].start()
        time.sleep(10)
        print 'exec',threads[i]
      for i in dict_cmd:
        threads[i].join()


关键字