2016-05-29 141 views
3

我正在管理一个WiFi网络与多个中继器(接入点)。
我制作了一个脚本,用于统计每个用户的连接用户数量。例如,对于AP 1和2:在Linux shell脚本上并行化行(命令,进程...)

[email protected]:~/Temporal/ClientesActivos$ ./ClientesActivos-AP-N.sh 1 
3 
[email protected]:~/Temporal/ClientesActivos$ ./ClientesActivos-AP-N.sh 2 
10 

但它是一个位。例如,对于AP 3:

[email protected]:~/Temporal/ClientesActivos$ time ./ClientesActivos-AP-N.sh 3 
5 
real 0m7.074s 
user 0m0.040s 
sys  0m0.040s 

所以,只要我有10点以上的接入点,我想并行所有的读数。我制作了另一个脚本,调用背景中的各个请求。例如:

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" 

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

[email protected]:~/Temporal/ClientesActivos$ echo $a 

[email protected]:~/Temporal/ClientesActivos$ a=$(./ClientesActivos-AP-N.sh 4) 
[email protected]:~/Temporal/ClientesActivos$ echo $a 
6 
[email protected]:~/Temporal/ClientesActivos$ unset a 
[email protected]:~/Temporal/ClientesActivos$ echo $a 

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

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

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

进一步的资料:

  • 我的壳是猛砸,但通用的答案会是有用的。
+1

让你的异步脚本写入文件,而不是分配给变量(后者可能是不可能的)。 –

+0

我也在想,@n.m。但是这需要更多的编程(检查文件是否已经充满了数据,不仅是已创建的,而是空的,等等),所以我想知道是否有更简单的方法。如果没有更好的方法,我会使用它。谢谢。 –

+0

不,让他们写入不同的文件,每个作业一个文件。 –

回答

2

最简单的方法是使用GNU Parallel

例子:

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

强大的解决方案,谢谢。你可以添加参数,如'./ClientesActivos-AP-N.sh -c -t 15 ::: $(seq 1 5)'。谢谢。 –