Answers:
您不使用while循环。
parallel "sortstuff.sh -a {} > sortedstuff-{}" <live_hosts
请注意,如果您的路径live_hosts
(例如/some/dir/file
)中的路径会扩展为sortstuff.sh -a /some/dir/file > sortedstuff-/some/dir/file
(导致no such file or directory
),则此方法将无效;对于这些情况{//}
,{/}
请使用和(有关详细信息,请参见gnu-parallel
手册):
parallel "sortstuff.sh -a {} > {//}/sortedstuff-{/}" <live_hosts
>
,| tee
例如 parallel "sortstuff.sh -a {} | tee sortedstuff-{}" <live_hosts
您不需要 parallel
,因为循环的主体不依赖于先前的迭代。只需为每个主机启动一个新的后台进程。
while read host; do
sortstuff.sh -a "$host" > sortedstuff-"$host" &
done < live_hosts
wait # Optional, to block until the background tasks are done
parallel
确实可以更轻松地管理某些方面;您可以更轻松地限制并行运行的作业数量。
wc -l live_hosts
大于磁盘主轴或CPU内核的数量(取决于任务是I / O还是CPU绑定的),您将吞噬通过这种解决方案从并行性中获得的很多好处。parallel
如果您的目标是处理速度,那么限制作业数量的能力不仅不错,而且几乎是必不可少的。
tee
与parallel
将输出到时sortedstuff
?这样我就可以看到输出。