【发布时间】:2017-11-25 07:39:26
【问题描述】:
我想使用 gnu 并行在 for 循环中的 bash 脚本中执行一个函数,但我无法从我上网的信息中弄清楚如何。 例如:
#!/bin/bash
get_racks(){
query that outputs a list of racks
}
get_hosts() {
query that outputs a list of hosts by rack(passed as param to the func)
}
get_gw() {
query that outputs a list of gateways
}
check_ping() {
HOSTS=(`get_hosts`)
COUNTER=0
while [ $COUNTER -lt $SIZE ] ; do
ssh $HOSTS "ping -c 5 ${GATEWAYS[$COUNTER]} " ;
COUNTER=$((COUNTER+1)) ;
done
}
RACKS=(`get_racks`)
HOSTS=(`get_hosts`)
GWS=(`get_gw`)
SIZE=${#GWS[@]}
COUNTER=0
for rack in ${RACKS[@]}; do
parallel check_ping | tee output.txt
done
我想并行执行 for 循环和内部发生的事情,同时控制并发作业的数量并将所有内容输出到单个文件中。最终文件应该包含函数返回的所有数据并打印到 stdout 。 此外,check_ping 有一部分 ssh 到远程机器并 ping GW,这部分实际上与自定义 ssh 命令并行发生,我们将 ssh 并行到阵列中的所有主机并 ping GW。
非常感谢
【问题讨论】:
标签: linux bash shell parallel-processing scripting