簡體   English   中英

並行化Linux shell腳本上的行(命令,進程...)

[英]Parallelizing lines (commands, processes…) on a Linux shell script

我正在管理一個帶有多個中繼器 (接入點)的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 ,但通用答案也很有用。

最簡單的方法是使用GNU Parallel

例:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM