首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >并行行(命令、进程.)在Linux shell脚本上

并行行(命令、进程.)在Linux shell脚本上
EN

Stack Overflow用户
提问于 2016-05-29 15:20:07
回答 1查看 47关注 0票数 3

我正在管理一个WiFi网络,它有多个中继器(接入点)。

我已经做了一个脚本,统计每一个连接用户的数量。AP 1和2的例子:

代码语言:javascript
复制
luis@Fresoncio:~/Temporal/ClientesActivos$ ./ClientesActivos-AP-N.sh 1
3
luis@Fresoncio:~/Temporal/ClientesActivos$ ./ClientesActivos-AP-N.sh 2
10

但它有点的慢。AP 3的例子:

代码语言:javascript
复制
luis@Fresoncio:~/Temporal/ClientesActivos$ time ./ClientesActivos-AP-N.sh 3
5
real    0m7.074s
user    0m0.040s
sys     0m0.040s

因此,只要我有超过10个AP,我想并行所有的读数。我已经编写了另一个脚本,在后台中调用各个请求。类似于:

代码语言:javascript
复制
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测试中:

代码语言:javascript
复制
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,但是一般的答案也很有用。
EN

回答 1

Stack Overflow用户

发布于 2016-05-29 15:25:36

最简单的方法是使用GNU并行

示例:

代码语言:javascript
复制
parallel ./ClientesActivos-AP-N.sh ::: $(seq 1 5)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37511598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档