Python写的多线程备份、追踪脚本
本帖最后由 ning_lianjie 于 2010-11-05 09:28 编辑
- #!/usr/bin/python
- import os,sys,time,re,threading
- now=time.strftime('%Y%m%d')
- log_02='/tmp/tongbu_stats_%s.csv' % (now)
- dict_cmd={
- 'test1':'/usr/bin/rsync -tzrlp --stats /tmp/test1 /tmp/test2010',
- 'test2':'/usr/bin/rsync -tzrp --stats /tmp/test2 /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(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_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()
复制代码注释:
1·同时执行一个脚本中的备份命令,避免服务资源的浪费。
2·最后的sleep是睡眠时间,避免同一时间,启动太多进程。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
复制代码这种结构,并没有实现并行,而是每个线程运行之后,等待结束,再等10秒,才开始下一次循环。
本帖最后由 ning_lianjie 于 2010-11-05 09:30 编辑
回复 2# send_linux
我昨晚测试,这个脚本还不是想象那样,需要修改。没有实现并行。
每个线程设置start。简写还是会出问题
谢谢分享啊,呵呵