- 论坛徽章:
- 2
|
本帖最后由 ning_lianjie 于 2010-11-10 12:42 编辑
功能:备份数据,方便备份追踪- #!/usr/bin/python
- '''Synchronous script
- About rsync-server'''
- import os,sys,time,re
- now=time.strftime('%Y%m%d')
- passwd='/tmp/.passwd'
- log22='/tmp/stats_%s.csv' % (now)
- dict_mon={
- 'mytest1':('ning@127.0.0.1::','/tmp/test2010'),
- 'mytest2':('ning@127.0.0.1::','/tmp/test2010'),
- }
- def write_title(log_stat):
- file_log=open(log_stat,'a')
- file_log.write('start_time,end_time,module,Number of files,Number of files transferred,Total file size(bytes),Total transferred file size(bytes)\n')
- file_log.close()
- def write_notes(d_ary,log_stat,port=873):
- for i in d_ary:
- line_mon=d_ary[i]
- cmd='rsync -tzrp --stats --port=%s --password-file=%s %s%s %s' % (port,passwd,line_mon[0],i,line_mon[1])
- 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):
- # print each_line2.group()
- 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,i,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_time,e_time,i,'error','error','error','error'+os.linesep)
- fle.write(cmd_stat)
- fle.close()
- if __name__ == '__main__':
- write_title(log22)
- write_notes(dict_mon,log22)
- # write_notes(dict_mon,log22,8770)
复制代码 代码解释:
#字典格式,以模块名为键,以用户名、源IP、目的地址为值
#定义一个函数,设置log_stat为参数
#file_log=open(log_stat,'a')以追加方式打开文件,file_log.close()关闭文件。
#这个是命令执行、日志处理的函数。
#定义3个参数,分别为字典、日志、端口
#1·循环字典,把键赋给i。
#2·line_mon=d_ary的意思是,把字典的值以列表的形式赋给变量line_mon
#3·定义执行的命令,用%符号,完成替换。
#4·starttime为命令开始执行的时间,endtime为命令执行结束的时间
#5·try…except作为异常处理,如果try段的代码执行出错,就会执行except中的代码
#6·cmd_put=os.popen(cmd),os.popen()执行系统命令,并把结果保存在变量cmd_put中。
#7·list_tmp=[],定义一个空列表
#8·re_p定义一个正则表达式的法则,并分组,前面的匹配条件一组,(\d+)?表示与数字匹配。
#9·进行两次循环,先把cmd_put的语句迭代给each_line1,然后再逐行进行匹配,把匹配结果存入each_line2,然后再进行判断,如果条件符合,就把值追加到列表,否则什么也不做。 |
|