图吧工具箱自动化,运维人写的批量检测脚本,探索命令行调用、批处理集成与IT运维提效新姿势
目录

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。
我们来聊聊“图吧工具箱 + 自动化:运维人写的批量检测脚本”,探索命令行调用、批处理集成与 IT 运维提效的新姿势。
“图吧工具箱”通常指的是那些集合了多种系统诊断、检测、优化工具的软件集合,尤其在 Windows 领域比较流行。它们往往提供了命令行接口(CLI)或可执行文件,方便脚本调用。
结合自动化,运维人员可以利用这些工具,编写批量检测脚本,极大地提高工作效率,实现对服务器、网络设备的批量健康检查、性能诊断等。
核心理念:自动化 + 命令行工具 = 运维提效
- 命令行调用 (CLI):这是自动化运维的基础。大部分优秀的工具都提供了命令行接口,允许通过文本命令来执行其功能,并且可以接受参数、返回结果。
- 批处理/脚本集成:利用 Shell 脚本 (Linux/macOS) 或批处理/PowerShell 脚本 (Windows),将多个命令行工具的调用串联起来,实现自动化流程。
- 结果解析与处理:脚本需要能够读取命令行工具的输出,解析其中的关键信息(如状态码、错误信息、性能指标),并根据预设规则进行判断和告警。
- 标准化与模板化:将常用的检测流程封装成可复用的脚本或模块,方便快速部署到新的环境或用于其他检测任务。

实战路径:图吧工具箱 + 自动化脚本
假设我们有一个“图吧工具箱”的 Windows 版本,其中包含一些我们需要的命令行工具(例如,ping.exe, tracert.exe, netstat.exe, tasklist.exe, 甚至是一些第三方硬件检测工具的 CLI 版本)。
场景 1:服务器基础健康检查(Windows 环境)
目标: 编写一个批处理脚本,批量检测多台服务器的网络连通性、端口开放情况、关键进程运行状态。
1. 准备工作:
- 工具清单:确定“图吧工具箱”或系统中已有的命令行工具:
ping.exe:测试网络连通性。telnet.exe(或Test-NetConnectionin PowerShell):测试特定端口是否开放。tasklist.exe:检查进程是否存在。- (可选)一个支持 CLI 的硬件检测工具,如
hwinfo.exe(假设有 CLI 版)。
- 目标服务器列表:准备一个包含服务器 IP 地址或主机名的文本文件,例如
servers.txt。
192.168.1.10
192.168.1.11
server01.domain.local
server02.domain.local
- 关键信息:确定需要检查的端口(如 80, 443, 3389, 1433)和关键进程(如
sqlservr.exe,nginx.exe,tomcat.exe)。
2. 编写批处理脚本 (batch_check.bat)
@echo off
REM ----------------------------------------------------
REM Batch Server Health Check Script
REM Author: Your Name / DevOps Team
REM Date: 2023-10-27
REM Purpose: Perform basic health checks on a list of servers.
REM ----------------------------------------------------
SETLOCAL ENABLEDELAYEDEXPANSION
REM --- Configuration ---
SET SERVER_LIST=servers.txt
SET LOG_FILE=health_check_log_%date:~-4,4%%date:~-10,2%%date:~-7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.txt
REM Clean up old logs or manage log rotation if needed
SET CRITICAL_PORTS=80,443,3389,1433
SET CRITICAL_PROCESSES=sqlservr.exe,nginx.exe,tomcat.exe
REM --- Initialization ---
echo ==================================================== > %LOG_FILE%
echo Server Health Check Report
echo Generated on: %date% %time%
echo ==================================================== >> %LOG_FILE%
echo. >> %LOG_FILE%
REM --- Main Loop ---
IF NOT EXIST %SERVER_LIST% (
echo ERROR: Server list file "%SERVER_LIST%" not found!
echo ERROR: Server list file "%SERVER_LIST%" not found! >> %LOG_FILE%
EXIT /B 1
)
FOR /F "delims=" %%S IN (%SERVER_LIST%) DO (
ECHO Checking server: %%S ...
echo --- Checking %%S --- >> %LOG_FILE%
REM 1. Ping Test
ping -n 2 %%S > nul
IF ERRORLEVEL 1 (
echo [FAIL] Network unreachable for %%S. >> %LOG_FILE%
) ELSE (
echo [OK] Network reachable for %%S. >> %LOG_FILE%
REM 2. Port Check (using telnet or a more robust tool if available)
REM Telnet CLI behavior can be tricky. PowerShell's Test-NetConnection is better but not always available.
REM For simplicity, we'll loop and check. A more robust solution would involve a dedicated tool or script.
FOR %%P IN (%CRITICAL_PORTS%) DO (
echo.
REM Using PowerShell for better port checking if available
powershell -Command "try { $host.name = '%%S'; $port = %%P; $test = New-Object Net.Sockets.TcpClient; $test.Connect('%%S', %%P); if ($test.Connected) { exit 0 } else { exit 1 } } catch { exit 1 }" > nul 2>&1
IF ERRORLEVEL 1 (
echo [FAIL] Port %%P is NOT open on %%S. >> %LOG_FILE%
) ELSE (
echo [OK] Port %%P is open on %%S. >> %LOG_FILE%
)
REM If PowerShell is not available, you might have to use telnet in a more complex way
REM or rely on a specific CLI tool from "图吧工具箱".
)
REM 3. Critical Process Check
FOR %%P IN (%CRITICAL_PROCESSES%) DO (
tasklist /S %%S /FI "IMAGENAME eq %%P" 2> nul | find "%%P" > nul
IF ERRORLEVEL 1 (
echo [FAIL] Process %%P is NOT running on %%S. >> %LOG_FILE%
) ELSE (
echo [OK] Process %%P is running on %%S. >> %LOG_FILE%
)
)
REM 4. (Optional) Hardware Check (if tool is available)
REM Assuming hwinfo.exe has a CLI mode that outputs results to stdout or a file
REM Example: hwinfo.exe /servers:%%S /check:cpu /output C:\temp\%%S_cpu_info.txt
REM Then parse C:\temp\%%S_cpu_info.txt for specific info.
REM This part is highly tool-dependent.
)
echo. >> %LOG_FILE%
)
echo ==================================================== >> %LOG_FILE%
echo Check completed. Results logged to %LOG_FILE%
echo ==================================================== >> %LOG_FILE%
echo Batch check finished. Check %LOG_FILE% for details.
ENDLOCAL
REM PAUSE REM Uncomment to keep the console window open after execution
脚本解释:
@echo off: 关闭命令回显。SETLOCAL ENABLEDELAYEDEXPANSION: 启用延迟环境变量扩展,允许在循环中使用!variable!来获取最新值。SET SERVER_LIST,SET LOG_FILE: 配置输入文件和输出日志文件。日志文件名包含日期和时间,方便追踪。SET CRITICAL_PORTS,SET CRITICAL_PROCESSES: 定义需要检查的关键项。FOR /F ... IN (...): 遍历servers.txt文件中的每一行(服务器地址)。ping -n 2 %%S > nul: 执行 ping 命令,> nul丢弃标准输出,IF ERRORLEVEL 1判断 ping 是否失败(通常 1 表示失败)。- 端口检查:
- 示例中使用了 PowerShell 的
Test-NetConnection(通过powershell -Command ...执行)。这是一种更可靠的跨平台端口检测方式(在支持 PowerShell 的 Windows 上)。 - 如果 PowerShell 不可用,可以考虑使用
telnet <server> <port>,但其 CLI 输出不直观,需要复杂的解析。 - 更推荐:使用“图吧工具箱”或第三方命令行工具,这些工具可能提供了更友好的端口扫描 CLI(如
nmap -p <port> <server>)。
- 示例中使用了 PowerShell 的
tasklist /S %%S /FI "IMAGENAME eq %%P" 2> nul | find "%%P" > nul:/S %%S:指定远程服务器。/FI "IMAGENAME eq %%P":过滤条件,查找指定名称的进程。2> nul:丢弃标准错误输出。| find "%%P":管道将tasklist的输出传递给find命令。如果find找到了进程名,则返回 0 (OK),否则返回 1 (FAIL)。
- 输出:所有检测结果都追加到日志文件 (
>> %LOG_FILE%)。
3. 运行脚本
- 将上述脚本保存为
batch_check.bat。 - 创建一个
servers.txt文件,包含你要检测的服务器 IP 或主机名。 - 在 Windows 命令提示符 (CMD) 或 PowerShell 中运行:
.\batch_check.bat
4.检查生成的 health_check_log_YYYYMMDD_HHMMSS.txt 文件。
场景 2:Linux/macOS 服务器基础健康检查
目标: 编写 Shell 脚本,批量检测服务器的网络连通性、服务端口、关键进程。
1. 准备工作:
- 工具清单:
ping:网络连通性。nc(netcat) 或nmap:端口检查。ps:进程检查。ssh:用于远程执行命令。
- 目标服务器列表:
servers.txt。 - SSH 密钥/密码:需要配置 SSH 免密登录,或在脚本中处理密码。
2. 编写 Shell 脚本 (batch_check.sh)
#!/bin/bash
# ----------------------------------------------------
# Batch Server Health Check Script (Linux/macOS)
# Author: Your Name / DevOps Team
# Date: 2023-10-27
# Purpose: Perform basic health checks on a list of servers via SSH.
# ----------------------------------------------------
SERVER_LIST="servers.txt"
LOG_FILE="health_check_log_$(date +%Y%m%d_%H%M%S).log"
CRITICAL_PORTS="80,443,3389,1433" # Note: 3389 is RDP, less common on Linux targets but useful for mixed environments
CRITICAL_PROCESSES="sshd,apache2,nginx,mysql" # Common Linux processes
# --- Initialization ---
echo "====================================================" > "$LOG_FILE"
echo "Server Health Check Report" | tee -a "$LOG_FILE"
echo "Generated on: $(date)" | tee -a "$LOG_FILE"
echo "====================================================" | tee -a "$LOG_FILE"
echo "" | tee -a "$LOG_FILE"
# --- Main Loop ---
if [ ! -f "$SERVER_LIST" ]; then
echo "ERROR: Server list file \"$SERVER_LIST\" not found!" | tee -a "$LOG_FILE"
exit 1
fi
# Read server list, ensure proper handling of spaces in hostnames (though less common)
while IFS= read -r server_host || [[ -n "$server_host" ]]; do
echo "Checking server: $server_host ..."
echo "--- Checking $server_host ---" | tee -a "$LOG_FILE"
# 1. Ping Test
if ping -c 2 -W 2 "$server_host" &> /dev/null; then
echo " [OK] Network reachable for $server_host." | tee -a "$LOG_FILE"
# 2. Port Check (using nc)
IFS=',' read -ra ports <<< "$CRITICAL_PORTS"
for port in "${ports[@]}"; do
# Use nc for port check. -z for zero-I/O mode (scan), -w timeout
if nc -z -w 2 "$server_host" "$port" &> /dev/null; then
echo " [OK] Port $port is open on $server_host." | tee -a "$LOG_FILE"
else
echo " [FAIL] Port $port is NOT open on $server_host." | tee -a "$LOG_FILE"
fi
done
# 3. Critical Process Check (using ssh and ps)
IFS=',' read -ra processes <<< "$CRITICAL_PROCESSES"
for process in "${processes[@]}"; do
# Execute 'ps aux | grep <process>' remotely via SSH
# The 'grep -v grep' is to exclude the grep process itself from the results
# The 'awk' command checks if any line matches the process name
if ssh -o ConnectTimeout=5 -o BatchMode=yes "$server_host" "ps aux | grep -v grep | grep '$process'" &> /dev/null; then
echo " [OK] Process '$process' is running on $server_host." | tee -a "$LOG_FILE"
else
echo " [FAIL] Process '$process' is NOT running on $server_host." | tee -a "$LOG_FILE"
fi
done
# 4. (Optional) Hardware Check (if tool is available and CLI compatible)
# Example: ssh user@$server_host "sudo /opt/my_hw_tool/check_cpu --level=basic"
# This would require the tool to be installed on the remote server and accessible.
else
echo " [FAIL] Network unreachable for $server_host." | tee -a "$LOG_FILE"
fi
echo "" | tee -a "$LOG_FILE"
done < "$SERVER_LIST"
echo "====================================================" | tee -a "$LOG_FILE"
echo "Check completed. Results logged to $LOG_FILE" | tee -a "$LOG_FILE"
echo "====================================================" | tee -a "$LOG_FILE"
脚本解释:
#!/bin/bash: Shebang,指定用 Bash 执行。tee -a "$LOG_FILE":tee命令可以将输出同时显示在屏幕和追加到文件。ping -c 2 -W 2 "$server_host": 发送 2 个 ping 包,等待 2 秒超时。&> /dev/null重定向标准输出和标准错误到空设备。nc -z -w 2 "$server_host" "$port":nc(netcat) 的-z选项用于扫描端口,-w 2设置超时。ssh -o ConnectTimeout=5 -o BatchMode=yes "$server_host" "command":-o ConnectTimeout=5: 设置 SSH 连接超时时间。-o BatchMode=yes: 防止 SSH 在需要密码时进行交互式提示(通常需要配合 SSH 密钥对)。"ps aux | grep -v grep | grep '$process'": 在远程服务器上执行命令,查找进程。
3. 运行脚本
- 确保你的 SSH 密钥对已配置好,可以在客户端机器上免密登录到所有目标服务器。
- 将脚本保存为
batch_check.sh。 - 创建
servers.txt文件。 - 在 Linux/macOS 终端中运行:
chmod +x batch_check.sh
./batch_check.sh
5.检查生成的 .log 文件。

IT 运维提效新姿势
- 批量化操作:将原本需要一台一台手动执行的命令,变成脚本一次性完成,节省大量时间。
- 标准化检测:通过脚本确保每次检测的流程、内容一致,减少人为误差。
- 自动化告警:脚本的输出可以被进一步处理。例如,如果检测到任何
[FAIL],可以触发邮件、Slack 消息或告警系统的通知。 - 定时任务:利用
cron(Linux/macOS) 或 Task Scheduler (Windows) 定时执行这些脚本,实现 24/7 的健康监控。 - 配置管理集成:脚本可以与配置管理工具(如 Ansible, SaltStack, Chef)集成,在部署新服务器或修改配置后,立即执行健康检查。
- 故障排除加速:当告警触发时,脚本的日志提供了初步的故障排查信息,帮助运维人员快速定位问题。
- “图吧工具箱”的 CLI 价值:如果“图吧工具箱”提供了强大的、易于调用的命令行工具(例如,专门的硬件检测、磁盘诊断、网络嗅探等 CLI 工具),那么它们将成为自动化脚本的宝贵财富。运维人员的价值在于:
- 识别工具:知道哪些工具能解决什么问题。
- 掌握 CLI:了解工具的命令行参数和输出格式。
- 编写逻辑:设计脚本流程,处理逻辑判断、循环、错误捕获。
- 结果解析:能够从工具输出中提取有效信息。
进阶探讨
- 更健壮的工具:考虑使用
nmap进行更全面的端口扫描,mtr(My traceroute) 进行网络路径诊断。 - PowerShell 深度集成:在 Windows 环境,PowerShell 提供了更强大的对象处理能力和 Cmdlets(如
Test-NetConnection,Get-Process,Invoke-WebRequest),可以写出更强大、更具可读性的脚本。 - 跨平台兼容性:使用 Python 编写脚本,可以同时在 Windows, Linux, macOS 上运行,并通过
subprocess模块调用本地的命令行工具,甚至通过paramiko(Python SSH 库) 远程执行命令。 - 日志分析与可视化:将脚本生成的日志数据导入到 ELK (Elasticsearch, Logstash, Kibana) 或其他日志分析平台,进行趋势分析、故障预警可视化。
- 配置即代码:将脚本的配置(服务器列表、检查项、阈值)与代码分离,存放在 YAML 或 JSON 文件中,实现“配置即代码”。
总结
“图吧工具箱 + 自动化脚本”是运维人员提升效率的经典且有效的方式。通过熟练运用命令行工具,结合批处理或 Shell 脚本,可以将重复性的检测、诊断工作自动化,从而腾出更多精力处理复杂问题,并构建更加稳定、可靠的 IT 系统。关键在于深入理解工具、掌握脚本语言,并不断将实践经验沉淀为可复用的自动化解决方案。
如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐
所有评论(0)