You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何扩展Syslog监控脚本以同时监控UniFi交换机多个端口

多端口监控扩展方案(避免阻塞)

你的核心问题是原脚本在处理端口延迟启用时的sleep 5m会阻塞整个监控循环,导致其他端口的事件无法及时处理。解决思路是把每个端口的禁用+延迟启用操作放到后台异步执行,让主监控循环保持持续运行,同时通过锁文件避免同一端口被重复触发。

下面是修改后的完整脚本:

#!/bin/bash
# 配置要监控的端口列表
MONITORED_PORTS=(43 44 45)
LOGFILE="/home/user/scripts/uni_port_monitor.$(date +%Y-%m-%d_%H%M).log"
SWITCH_IDENTIFIER="USW-Pro-48-PoE-7.1.26+15869: switch: TRAPMGR: Link Down: 0/"

# 初始化日志输出
exec 1>> >(ts '[%Y-%m-%d %H:%M:%S]' > "$LOGFILE") 2>&1

echo "Starting multi-port monitoring for ports: ${MONITORED_PORTS[*]}"

# 定义处理端口断开的函数
handle_port_down() {
    local port=$1
    local lock_file="/tmp/uni_port_${port}_lock"

    # 检查是否已有正在处理的任务,避免重复触发
    if [ -f "$lock_file" ]; then
        echo "Port $port is already being handled, skipping duplicate trigger"
        return
    fi

    # 创建锁文件
    touch "$lock_file"

    echo "Port $port disconnected, disabling it now"
    /home/user/scripts/adminp${port}.sh

    echo "Waiting 5 minutes before re-enabling port $port"
    sleep 5m

    echo "Re-enabling port $port"
    /home/user/scripts/adminp${port}on.sh

    # 删除锁文件,释放任务权限
    rm "$lock_file"
}

# 持续监控syslog
tail -fn0 /var/log/syslog | while read -r line; do
    # 遍历所有监控端口,检查当前日志行是否匹配对应端口的Link Down事件
    for port in "${MONITORED_PORTS[@]}"; do
        if echo "$line" | grep -q "${SWITCH_IDENTIFIER}${port}"; then
            # 后台执行处理函数,不阻塞主循环
            handle_port_down "$port" &
        fi
    done
done

关键改进点:

  • 异步处理:用&把handle_port_down放到后台执行,主监控循环不会被sleep阻塞,能实时处理其他端口的日志事件
  • 端口配置化:通过MONITORED_PORTS数组统一管理要监控的端口,新增/删除端口只需要修改数组
  • 重复触发防护:用临时锁文件/tmp/uni_port_${port}_lock避免同一端口在5分钟冷却期内被多次触发(比如网络波动导致多次Link Down日志)
  • 代码复用:通过函数handle_port_down统一处理端口逻辑,不用为每个端口写重复代码

注意事项:

  • 确保每个端口对应的adminpX.sh和adminpXon.sh脚本存在且可执行(X为端口号)
  • 如果需要调整冷却时间,直接修改sleep 5m即可(比如sleep 3m是3分钟)
  • 系统重启会自动清理/tmp下的锁文件,也可以在脚本开头添加手动清理逻辑

内容的提问来源于stack exchange,提问作者Smirnulf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 04:50:02