并行处理循环读取文件

倒转

PCAP脚本。

我有一台具有32个处理器的服务器,需要最大化此脚本以利用这些处理器。目前,该程序tshark仅使用1个处理器,因此我需要同时运行多个实例tshark当前,以下脚本中定义的循环一次执行1 pcap,这非常慢。我需要一次最多运行15tshark秒,但是直到循环到达文件末尾时,我最多只能运行15秒。

本质上,脚本读取某些pcap文件并在文本文件中列出pcap,然后使用tshark进行过滤,然后使用合并mergecap

在此示例中,有5个pcap文件要过滤。

  1. full_cap_1589
  2. full_cap_1590
  3. full_cap_1591
  4. full_cap_1592
  5. full_cap_1593

#!/ bin / bash
#测试脚本以解析pcap文件
#DATE =`日期| awk'{print $ 2}'`
设置-x


回显“开始时间-月/日TIME示例:07/19 08:00”

读-e date1

回声“结束时间-月/日时间示例07/19 08:35”

读-e date2

回显“要过滤的IP地址?”

读-e ip

回声$ ip

FIND =`查找/ mnt / pcap / captures / -type f -newermt“ $ date1”!-newermt“ $ date2” | 剪切-c20-40> / home / username / loading_dock / load.txt`

#for“ $ {FIND [@]}”中的full_caps

对于我在`cat / home / username / loading_dock / load.txt`中


  tshark -r / mnt / pcap / captures / $ i“ -Y ip.addr == $ ip” -w / home /用户名/loading_dock/$i.pcap


完毕

mergecap -w / home /用户名/loading_dock/*.pcap -w / home /用户名/test1.pcap

rm -rf / home /用户名/loading_dock/*.pcap
rm -f / home /用户名/loading_dock/load.txt

出口0
奥莱·丹吉(Ole Tange)

您可以使用GNU Parallel:

parallel -j15 tshark -r /mnt/pcap/captures/{} \'"-Y ip.addr == $ip"\' -w /home/username/loading_dock/{}.pcap :::: /home/username/loading_dock/load.txt

GNU Parallel是一个通用的并行器,使您可以轻松地在具有ssh访问权限的同一台计算机或多台计算机上并行运行作业。

如果要在4个CPU上运行32个不同的作业,并行化的直接方法是在每个CPU上运行8个作业:

简单的调度

相反,GNU Parallel在完成时会产生一个新进程-使CPU保持活动状态,从而节省时间:

GNU并行调度

安装

出于安全原因,您应该使用软件包管理器安装GNU Parallel,但是如果未将GNU Parallel打包用于您的发行版,则可以进行个人安装,不需要root访问。这样做可以在10秒内完成:

(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash

有关其他安装选项,请参见http://git.savannah.gnu.org/cgit/parallel.git/tree/README

了解更多

查看更多示例:http : //www.gnu.org/software/parallel/man.html

观看介绍性视频:https : //www.youtube.com/playlist? list =PL284C9FF2488BC6D1

浏览本教程:http : //www.gnu.org/software/parallel/parallel_tutorial.html

注册电子邮件列表以获得支持:https : //lists.gnu.org/mailman/listinfo/parallel

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章