Python写的多线程备份、追踪脚本

发布于 2022-09-07 19:47:25 字数 3338 浏览 12 评论 3

本帖最后由 ning_lianjie 于 2010-11-05 09:28 编辑

  1. #!/usr/bin/python
  2. import os,sys,time,re,threading
  3. now=time.strftime('%Y%m%d')
  4. log_02='/tmp/tongbu_stats_%s.csv' % (now)
  5. dict_cmd={
  6. 'test1':'/usr/bin/rsync -tzrlp --stats /tmp/test1 /tmp/test2010',
  7. 'test2':'/usr/bin/rsync -tzrp --stats /tmp/test2 /tmp/test2010'
  8. }
  9. def write_title(log_stat):
  10.     file_log=open(log_stat,'a')
  11.     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')
  12.     file_log.close()
  13. def write_notes(cmd,log_stat,nam):
  14.     fle=open(log_stat,'a')
  15.     try:
  16.         s_time=time.strftime('%H:%M:%S')
  17.         cmd_put=os.popen(cmd)
  18.         list_tmp=[]
  19.         re_p=re.compile('(Number of files:|Number of files transferred:|Total file size:|Total transferred file size:) (d+)?')
  20.         for each_line1 in cmd_put:
  21.             for each_line2 in re_p.finditer(each_line1):
  22.                 if each_line2 is not None:
  23.                     list_tmp.append(each_line2.group(2))
  24.                 else:
  25.                     pass
  26.         e_time=time.strftime('%H:%M:%S')
  27.         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)
  28.         cmd_put.close()
  29.         fle.write(cmd_stat)
  30.     except:
  31.         cmd_stat='%s,%s,%s,%s,%s,%s' % (s_time,e_time,nam,'error','error','error','error'+os.linesep)
  32.         fle.write(cmd_stat)
  33.     fle.close()
  34. if __name__ == '__main__':
  35.     write_title(log_02)
  36.     threads = {}
  37.     for i in dict_cmd:
  38.         t=threading.Thread(target=write_notes,args=(dict_cmd[i],log_02,i))
  39.         print 'exec',i
  40.         threads[i]=t
  41.     for i in dict_cmd:
  42.         threads[i].start()
  43.         time.sleep(10)
  44.         print 'exec',threads[i]
  45.     for i in dict_cmd:
  46.         threads[i].join()

复制代码注释:
1·同时执行一个脚本中的备份命令,避免服务资源的浪费。
2·最后的sleep是睡眠时间,避免同一时间,启动太多进程。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

无法回应 2022-09-09 02:14:54
  1.     for i in dict_cmd:
  2.         threads[i]=threading.Thread(target=write_notes,args=(dict_cmd[i],log_02,i))
  3.         threads[i].start()
  4.         threads[i].join()
  5.         time.sleep(10)

复制代码这种结构,并没有实现并行,而是每个线程运行之后,等待结束,再等10秒,才开始下一次循环。

陌路终见情 2022-09-08 05:21:05

本帖最后由 ning_lianjie 于 2010-11-05 09:30 编辑

回复 2# send_linux

    我昨晚测试,这个脚本还不是想象那样,需要修改。没有实现并行。
每个线程设置start。简写还是会出问题

成熟的代价 2022-09-07 22:32:01

注释:
1·同时执行一个脚本中的备份命令,避免服务资源的浪费。
2·最后的sleep是睡眠时间,避免同一时间 ...
ning_lianjie 发表于 2010-11-04 17:29

    谢谢分享啊,呵呵

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文