并行处理结果写入单个文件

时间:2010-10-19 03:28:03

标签: linux file process

我是Linux新手并被介绍给“&”最近。我必须运行几个traceroutes并将它们存储在一个文件中,我很好奇我是否能够并行启动这些traceroutes?

我尝试了以下但生成的文件中的结果是不是分开了?嗯,这就是我的意思。

traceroute  -n -z 100 www.yahoo.com >> theLog.log &
traceroute  -n -z 100 www.abc.com >> theLog.log &

我要问甚至可以做什么?如果是这样,我应该使用什么命令?

感谢您给出的任何指示。

5 个答案:

答案 0 :(得分:1)

也许您可以调查parallel(并告诉我们您的体验)? 如果您使用的是Ubuntu,则可以sudo apt-get install moreutils获取parallel

答案 1 :(得分:1)

如果您希望它并行运行,最好将中间结果保存在单独的文件中,最后将它们连接起来。步骤是开始每个跟踪到它的日志文件并存储他们的pid,等待他们全部停止,他们加入结果,如下所示:

traceroute  -n -z 100 www.yahoo.com > theLog.1.log & PID1=$!
traceroute  -n -z 100 www.abc.com > theLog.2.log & PID2=$!    
wait $PDI1 $PDI2    
cat theLog.1.log theLog.2.log > theLog.log
rm theLog.2.log theLog.1.log

答案 2 :(得分:0)

使用以下命令它们并不是真正并行,但您可以继续使用终端,结果将被拆分:

{ traceroute -n -z 100 www.yahoo.com; traceroute -n -z 100 www.abc.com; } >> theLog.log &

答案 3 :(得分:0)

正如您所写,行为未定义。您可以尝试使用enzotib发布的内容,或尝试将每个内容写入自己的文件并在最后将它们整合在一起。

答案 4 :(得分:0)

@enzotib's answer中的

traceroute按顺序一次执行一个。

您可以使用@rmk parallel utility的建议并行执行traceroute

$ /usr/bin/time parallel traceroute -n -z 100 <hosts.txt >> parallel.log
24.78user 0.63system 1:24.04elapsed 30%CPU (0avgtext+0avgdata 37456maxresident)k
72inputs+72outputs (2major+28776minor)pagefaults 0swaps

顺序模拟慢5倍:

$ /usr/bin/time ./sequential.sh 
24.63user 0.51system 7:19.09elapsed 5%CPU (0avgtext+0avgdata 5296maxresident)k
112inputs+568outputs (1major+8759minor)pagefaults 0swaps

sequential.sh的位置:

#!/bin/bash
( while read host; do traceroute -n -z 100 $host; done; ) <hosts.txt >>sequential.log

hosts.txt是:

www.yahoo.com
www.abc.com
www.google.com
stackoverflow.com
facebook.com
youtube.com
live.com
baidu.com
wikipedia.org
blogspot.com
qq.com
twitter.com
msn.com
yahoo.co.jp
taobao.com
google.co.in
sina.com.cn
amazon.com
google.de
google.com.hk