Linux脚本如何循环检测网口状态?

在Linux系统中,循环检测网口状态是网络运维中的常见需求,例如监控网口是否UP、流量异常、丢包情况等,以便及时发现网络故障,通过编写bash脚本结合系统工具,可以实现自动化的循环检测,以下是具体实现方法和注意事项。

linux脚本如何循环检测网口

明确检测目标

在编写脚本前,需先确定检测的具体内容,常见的网口检测指标包括:

  1. 网口状态:是否处于UP(启用)或DOWN(禁用)状态;
  2. 流量统计:接收(RX)和发送(TX)的字节数、包数量;
  3. 连通性:通过ping测试网口与目标主机的连通性;
  4. 错误包:如CRC错误、丢包率等(需网卡支持)。

选择检测工具

Linux提供了多种命令行工具用于网口检测,以下是常用工具及其功能:

工具名 主要功能 常用示例命令
ip 查看网口状态、地址、路由等 ip link show eth0
ethtool 查看网卡详细信息、流量、错误统计 ethtool -S eth0
ifconfig 传统网口配置工具(部分系统已弃用) ifconfig eth0 | grep "RX packets"
ping 测试网络连通性 ping -c 4 192.168.1.1
awk/sed 提取命令输出中的关键信息 ip link show eth0 | awk '/state/ {print $9}'

编写循环检测脚本

以下是一个基础脚本示例,实现每10秒检测一次网口eth0的状态、流量和连通性,并将结果输出到终端和日志文件:

#!/bin/bash
# 定义网口和检测间隔
INTERFACE="eth0"
INTERVAL=10
LOG_FILE="/var/log/network_monitor.log"
# 检查网口是否存在
if ! ip link show "$INTERFACE" > /dev/null 2>&1; then
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] 错误:网口 $INTERFACE 不存在!" >> "$LOG_FILE"
    exit 1
fi
# 循环检测
while true; do
    TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
    # 1. 检测网口状态
    STATE=$(ip link show "$INTERFACE" | awk '/state/ {print $9}')
    # 2. 检测流量统计(RX和TX字节数)
    STATS=$(ip -s link show "$INTERFACE")
    RX_BYTES=$(echo "$STATS" | awk '/RX:/ {getline; print $1}')
    TX_BYTES=$(echo "$STATS" | awk '/TX:/ {getline; print $1}')
    # 3. 检测连通性(ping 4次,获取丢包率)
    PING_RESULT=$(ping -c 4 8.8.8.8 2>&1)
    PACKET_LOSS=$(echo "$PING_RESULT" | grep -o "packet loss" | awk '{print $1}')
    # 输出结果到终端
    echo "----------------------------------------"
    echo "[$TIMESTAMP] 网口检测报告:"
    echo "网口状态:$STATE"
    echo "接收字节数:$RX_BYTES"
    echo "发送字节数:$TX_BYTES"
    echo "丢包率:$PACKET_LOSS"
    # 记录到日志文件
    echo "[$TIMESTAMP] 网口状态:$STATE | RX: $RX_BYTES | TX: $TX_BYTES | 丢包率:$PACKET_LOSS" >> "$LOG_FILE"
    # 状态异常时告警(可选)
    if [ "$STATE" != "UP" ]; then
        echo "[$TIMESTAMP] 警告:网口 $INTERFACE 状态异常!当前状态:$STATE" >> "$LOG_FILE"
    fi
    # 休眠指定间隔
    sleep "$INTERVAL"
done

脚本优化与扩展

  1. 参数化配置:通过命令行参数指定网口和检测间隔,

    linux脚本如何循环检测网口

    INTERFACE=$1
    INTERVAL=$2

    执行时通过 ./script.sh eth0 5 指定网口和间隔。

  2. 流量速率计算:通过两次采样的字节数差值,计算每秒接收/发送速率:

    PREV_RX=0
    PREV_TX=0
    # 在循环中计算
    RX_RATE=$(( (RX_BYTES - PREV_RX) / INTERVAL ))
    TX_RATE=$(( (TX_BYTES - PREV_TX) / INTERVAL ))
    PREV_RX=$RX_BYTES
    PREV_TX=$TX_BYTES
  3. 多网口检测:使用for循环遍历多个网口,

    for INTERFACE in eth0 eth1; do
        # 检测逻辑
    done
  4. 日志轮转:避免日志文件过大,使用logrotate工具定期切割日志,或在脚本中添加日志文件大小判断,超过指定大小后备份并清空。

    linux脚本如何循环检测网口

FAQs

问题1:如何让检测脚本在后台持续运行,避免终端关闭后脚本终止?
解答:可通过以下方式实现后台持续运行:

  1. 使用nohup命令:nohup ./monitor_script.sh > /dev/null 2>&1 &,输出会被重定向到nohup.out&表示后台运行。
  2. 使用screentmux工具:先启动screen,运行脚本后按Ctrl+A+D detached,下次可通过screen -r重新 attached。
  3. 配置为系统服务:创建systemd服务单元文件(如/etc/systemd/system/network-monitor.service),通过systemctl start network-monitor启动,并设置开机自启。

问题2:如何根据检测结果触发告警(如邮件或短信)?
解答:可在脚本中添加告警逻辑,例如使用mail命令发送邮件,或调用第三方API发送短信,以下是以邮件告警为例(需系统已配置邮件服务):

# 在脚本的状态异常检测部分添加
if [ "$STATE" != "UP" ]; then
    ALERT_MSG="[$TIMESTAMP] 网口 $INTERFACE 状态异常!当前状态:$STATE,请立即检查!"
    echo "$ALERT_MSG" | mail -s "网口故障告警" admin@example.com
    echo "[$TIMESTAMP] 已发送告警邮件" >> "$LOG_FILE"
fi

若需短信告警,可接入短信平台API(如阿里云短信、腾讯云短信),使用curl命令调用接口发送短信内容,具体API调用方式需参考平台文档。

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/15366.html

(0)
酷番叔酷番叔
上一篇 2025年8月23日 17:09
下一篇 2025年8月23日 17:27

相关推荐

  • linux如何编写头文件

    Linux中编写头文件,需用#ifndef等防止重复包含,声明函数、

    2025年8月13日
    9400
  • Linux系统是如何探测连接的硬件设备的?

    Linux系统作为高度模块化的操作系统,其设备探测是一个分层、协同的过程,涉及内核驱动模型、总线枚举、设备树解析及用户空间工具等多个层面,最终实现硬件资源的自动识别与驱动加载,这一过程从系统启动之初便开始,贯穿硬件初始化到用户空间设备管理的全周期,内核设备驱动模型与总线枚举Linux内核通过“设备-驱动-总线……

    2025年10月6日
    7200
  • Linux如何完全卸载其他内核?

    在Linux系统中,随着系统更新或长期使用,硬盘可能会积累多个旧内核版本,占用不必要的存储空间(尤其是/boot分区),完全卸载其他内核需要谨慎操作,避免误删当前运行内核导致系统无法引导,以下是详细的卸载步骤及注意事项,涵盖主流Linux发行版(如Debian/Ubuntu、CentOS/RHEL、Arch L……

    2025年9月27日
    7400
  • linux如何查看jdk安装路径

    在Linux系统管理和Java开发中,准确获取JDK安装路径是环境配置、版本切换、问题排查的基础操作,由于JDK可能通过系统包管理器、手动编译安装或版本管理工具(如SDKMAN)部署,路径查找方法需结合实际场景选择,以下介绍6种常用方法,覆盖命令查询、环境变量解析、链接追踪等维度,使用which java定位可……

    2025年8月29日
    26700
  • 如何在Linux轻松安装个性化字体?

    准备工作:获取字体文件来源选择推荐可信源:Google Fonts(免费开源)、字体厂商官网、系统自带仓库(如fonts-*包),避免非授权来源,确保字体许可合规(增强可信度),常见格式TrueType(.ttf)、OpenType(.otf)兼容性最佳,WOFF/WOFF2通常用于网页,安装方法(按权限分类……

    2025年7月19日
    9800

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信