并行化Linux shell脚本上的行(命令,进程...)

时间:2016-05-29 15:20:07

标签: linux shell parallel-processing background-process

我正在使用多个转发器(接入点)管理 WiFi 网络。
我制作了一个脚本,用于计算每个用户的连接用户数。 AP 1和2的示例:

luis@Fresoncio:~/Temporal/ClientesActivos$ ./ClientesActivos-AP-N.sh 1
3
luis@Fresoncio:~/Temporal/ClientesActivos$ ./ClientesActivos-AP-N.sh 2
10

但它有点。 AP 3的示例:

luis@Fresoncio:~/Temporal/ClientesActivos$ time ./ClientesActivos-AP-N.sh 3
5
real    0m7.074s
user    0m0.040s
sys     0m0.040s

所以,只要我有超过10个AP,我想并行化所有读数。我制作了另一个脚本,用于调用后台中的各个请求。类似的东西:

AP-1=$(./ClientesActivos-AP-N.sh 1) &
AP-2=$(./ClientesActivos-AP-N.sh 2) &
AP-3=$(./ClientesActivos-AP-N.sh 3) &
... etc
sleep 20    # Wait 20 seconds for all readings to finish.
echo "$AP-1, $AP-2, $AP-3... etc"

但这似乎不起作用。至少在 shell 测试:

luis@Fresoncio:~/Temporal/ClientesActivos$ echo $a

luis@Fresoncio:~/Temporal/ClientesActivos$ a=$(./ClientesActivos-AP-N.sh 4)
luis@Fresoncio:~/Temporal/ClientesActivos$ echo $a
6
luis@Fresoncio:~/Temporal/ClientesActivos$ unset a
luis@Fresoncio:~/Temporal/ClientesActivos$ echo $a

luis@Fresoncio:~/Temporal/ClientesActivos$ a=$(./ClientesActivos-AP-N.sh 4) &
[1] 13527
[A few minutes later...]
luis@Fresoncio:~/Temporal/ClientesActivos$ echo $a

[1]+  Done                    a=$(./ClientesActivos-AP-N.sh 4)

我做错了什么,在shell脚本中并行化各个行的方法是什么? 后台处理是正确的方法吗?

进一步的数据:

  • 我的shell是 Bash ,但通用答案也很有用。

1 个答案:

答案 0 :(得分:2)

最简单的方法是使用GNU Parallel

示例:

parallel ./ClientesActivos-AP-N.sh ::: $(seq 1 5)