怎么在Linux利用Shell的数组(Array)特性在单机环境下并发监控上千台外部主机的存活状态

浅宇小哥_3357

浅宇小哥_3357

2026-05-24

584人浏览

原创

shell数组本身不支持并发,而是用数组管理主机列表,结合子进程并行、wait限流(50–100)、临时文件收集结果、超时重试及分组探测实现高效批量监控。

怎么在linux利用shell的数组(array)特性在单机环境下并发监控上千台外部主机的存活状态

在单机 Linux 环境下用 Shell 数组实现“并发监控上千台主机”需明确一点:Shell 本身不支持真正的高并发(如线程/协程),但可通过 子进程并行 + 数组管理主机列表 + 限流控制 实现高效批量探测。关键不是“数组并发”,而是用数组组织目标,再结合 wait、jobs 和合理并发数(如 50–100)避免系统过载。

用数组存储主机列表,支持动态加载和分片

Shell 数组适合存 IP 或域名,尤其配合文件读取或命令生成:

  • 从文件初始化:mapfile -t hosts (每行一个主机,自动去换行符)
  • 手动定义:hosts=("192.168.1.1" "10.0.0.5" "example.com")
  • 支持带端口或协议前缀(如 "ssh://192.168.1.10:22"),后续脚本可解析
  • 避免直接写死上千项——用数组变量承接,便于切片处理(如 "${hosts[@]:0:100}" 取前 100 台)

用子进程 + wait 控制并发数,避免 fork 爆炸

真正实现“并发”的是后台作业(&),数组只负责调度。例如设最大并发 64:

Linux installer
Linux installer

先解析安全源,运行本地CLI安装、启动、卸载Linux桌面应用。用户请求时使用。

下载
  • 遍历数组,每启动一个 ping -c1 -W2 $host > /dev/null & 就计数
  • 当后台任务数 ≥ 64 时,执行 wait -n(等待任一子进程退出)再启下一个
  • 用 jobs -r | wc -l 或更可靠方式(如计数器+trap)跟踪运行中任务数
  • 示例核心逻辑:for host in "${hosts[@]}"; do ((cnt++ % 64 == 0)) && wait -n; ping -c1 -W2 "$host" &>/dev/null & done; wait

用临时文件或管道收集结果,避免 stdout 混乱

上千个并发 ping 直接输出会交错,推荐结构化记录:

  • 每个子进程单独写结果到唯一临时文件:echo "$host:$(ping -c1 -W2 "$host" &>/dev/null && echo up || echo down)" > "/tmp/res.$$.${i}"
  • 或用命名管道(FIFO)+ 单独 reader 进程汇总,更健壮但稍复杂
  • 最终合并:cat /tmp/res.$$.* 2>/dev/null | sort,再用 awk 统计存活率
  • 注意清理:trap 'rm -f /tmp/res.$$.*' EXIT

增强实用性:超时、重试、多探测方式混合

仅靠 ping 不足,实际中常组合判断:

  • 对无 ICMP 响应的主机,补充 telnet 或 curl 检查关键端口:timeout 3 bash -c 'echo > /dev/tcp/$host/22' &>/dev/null && echo "$host ssh ok"
  • 失败后自动重试一次(加 || 链式调用),避免瞬时丢包误判
  • 将主机按类型分组存不同数组(如 web_hosts、db_hosts),分别设置探测策略
  • 结果输出为 CSV 或 JSON 格式,方便下游处理:printf '%s,%s\n' "$host" "$status" >> report.csv

不复杂但容易忽略:Shell 并发本质是进程级并行,受限于系统 ulimit -u(用户进程数)和内存。实测千台主机建议并发 50–80,全程耗时约 2–5 秒(取决于网络延迟),比串行快 50 倍以上。数组在这里是轻量、灵活的索引工具,而非并发引擎本身。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

linux

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

4010

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

3413

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

2593

5

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

2023.07.05

6290

7

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

2023.07.06

5942

7

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.20

3473

8

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

2023.07.20

2965

4

linux查看cpu使用率
linux查看cpu使用率

在linux的系统维护中,可能需要经常查看cpu使用率,分析系统整体的运行情况。本专题为大家带来了linux查看cpu使用率的相关文章,感兴趣的朋友千万不要错过了。

2023.07.25

3199

6

linux查找文件命令
linux查找文件命令

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.31

297

3

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习