目录

核心理念:自动化 + 命令行工具 = 运维提效

实战路径:图吧工具箱 + 自动化脚本

场景 1:服务器基础健康检查(Windows 环境)

场景 2:Linux/macOS 服务器基础健康检查

IT 运维提效新姿势

进阶探讨

总结


如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。

我们来聊聊“图吧工具箱 + 自动化:运维人写的批量检测脚本”,探索命令行调用、批处理集成与 IT 运维提效的新姿势。

“图吧工具箱”通常指的是那些集合了多种系统诊断、检测、优化工具的软件集合,尤其在 Windows 领域比较流行。它们往往提供了命令行接口(CLI)或可执行文件,方便脚本调用。

结合自动化,运维人员可以利用这些工具,编写批量检测脚本,极大地提高工作效率,实现对服务器、网络设备的批量健康检查、性能诊断等。


核心理念:自动化 + 命令行工具 = 运维提效

  1. 命令行调用 (CLI):这是自动化运维的基础。大部分优秀的工具都提供了命令行接口,允许通过文本命令来执行其功能,并且可以接受参数、返回结果。
  2. 批处理/脚本集成:利用 Shell 脚本 (Linux/macOS) 或批处理/PowerShell 脚本 (Windows),将多个命令行工具的调用串联起来,实现自动化流程。
  3. 结果解析与处理:脚本需要能够读取命令行工具的输出,解析其中的关键信息(如状态码、错误信息、性能指标),并根据预设规则进行判断和告警。
  4. 标准化与模板化:将常用的检测流程封装成可复用的脚本或模块,方便快速部署到新的环境或用于其他检测任务。

实战路径:图吧工具箱 + 自动化脚本

假设我们有一个“图吧工具箱”的 Windows 版本,其中包含一些我们需要的命令行工具(例如,ping.exetracert.exenetstat.exetasklist.exe, 甚至是一些第三方硬件检测工具的 CLI 版本)。

场景 1:服务器基础健康检查(Windows 环境)

目标: 编写一个批处理脚本,批量检测多台服务器的网络连通性、端口开放情况、关键进程运行状态。

1. 准备工作:

  • 工具清单:确定“图吧工具箱”或系统中已有的命令行工具:
    • ping.exe:测试网络连通性。
    • telnet.exe (或 Test-NetConnection in 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.exenginx.exetomcat.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_LISTSET LOG_FILE: 配置输入文件和输出日志文件。日志文件名包含日期和时间,方便追踪。
  • SET CRITICAL_PORTSSET 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>)。
  • 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. 运行脚本

  1. 将上述脚本保存为 batch_check.bat
  2. 创建一个 servers.txt 文件,包含你要检测的服务器 IP 或主机名。
  3. 在 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. 运行脚本

  1. 确保你的 SSH 密钥对已配置好,可以在客户端机器上免密登录到所有目标服务器。
  2. 将脚本保存为 batch_check.sh
  3. 创建 servers.txt 文件。
  4. 在 Linux/macOS 终端中运行:

chmod +x batch_check.sh
./batch_check.sh

     5.检查生成的 .log 文件。


IT 运维提效新姿势

  1. 批量化操作:将原本需要一台一台手动执行的命令,变成脚本一次性完成,节省大量时间。
  2. 标准化检测:通过脚本确保每次检测的流程、内容一致,减少人为误差。
  3. 自动化告警:脚本的输出可以被进一步处理。例如,如果检测到任何 [FAIL],可以触发邮件、Slack 消息或告警系统的通知。
  4. 定时任务:利用 cron (Linux/macOS) 或 Task Scheduler (Windows) 定时执行这些脚本,实现 24/7 的健康监控。
  5. 配置管理集成:脚本可以与配置管理工具(如 Ansible, SaltStack, Chef)集成,在部署新服务器或修改配置后,立即执行健康检查。
  6. 故障排除加速:当告警触发时,脚本的日志提供了初步的故障排查信息,帮助运维人员快速定位问题。
  7. “图吧工具箱”的 CLI 价值:如果“图吧工具箱”提供了强大的、易于调用的命令行工具(例如,专门的硬件检测、磁盘诊断、网络嗅探等 CLI 工具),那么它们将成为自动化脚本的宝贵财富。运维人员的价值在于:
    • 识别工具:知道哪些工具能解决什么问题。
    • 掌握 CLI:了解工具的命令行参数和输出格式。
    • 编写逻辑:设计脚本流程,处理逻辑判断、循环、错误捕获。
    • 结果解析:能够从工具输出中提取有效信息。

进阶探讨

  • 更健壮的工具:考虑使用 nmap 进行更全面的端口扫描,mtr (My traceroute) 进行网络路径诊断。
  • PowerShell 深度集成:在 Windows 环境,PowerShell 提供了更强大的对象处理能力和 Cmdlets(如 Test-NetConnectionGet-ProcessInvoke-WebRequest),可以写出更强大、更具可读性的脚本。
  • 跨平台兼容性:使用 Python 编写脚本,可以同时在 Windows, Linux, macOS 上运行,并通过 subprocess 模块调用本地的命令行工具,甚至通过 paramiko (Python SSH 库) 远程执行命令。
  • 日志分析与可视化:将脚本生成的日志数据导入到 ELK (Elasticsearch, Logstash, Kibana) 或其他日志分析平台,进行趋势分析、故障预警可视化。
  • 配置即代码:将脚本的配置(服务器列表、检查项、阈值)与代码分离,存放在 YAML 或 JSON 文件中,实现“配置即代码”。

总结

“图吧工具箱 + 自动化脚本”是运维人员提升效率的经典且有效的方式。通过熟练运用命令行工具,结合批处理或 Shell 脚本,可以将重复性的检测、诊断工作自动化,从而腾出更多精力处理复杂问题,并构建更加稳定、可靠的 IT 系统。关键在于深入理解工具、掌握脚本语言,并不断将实践经验沉淀为可复用的自动化解决方案。

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐