并行处理循环中从文件读取

并行处理循环中从文件读取

PCAP 脚本。

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

本质上,该脚本读取某些 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


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

读取-e日期1

echo "结束时间 - 月/日时间示例 07/19 08:35"

读取-e日期2

echo "要过滤什么IP地址?"

读取-e ip

回显 $ip

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

#for full_caps in "${FIND[@]}"

对于我在 `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

答案1

你可以使用 GNU 并行吗:

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

相关内容