2016-05-29 113 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)'。謝謝。 –

相關問題