您现在的位置是:首页 > 随手笔记网站首页随手笔记

[Ubuntu] 系统网络状态定时上报脚本

  • 小鑫
  • 2026-05-21 23:51:50
  • 373 次阅读
一、改用 /usr/local/bin 目录(无权限问题)这个目录是系统专门放脚本的地方,不会提示无权限。1. 创建脚本sudo nano /usr/local/bin/network_monitor.sh把下面完整内容粘...

一、改用 /usr/local/bin 目录(无权限问题)

这个目录是系统专门放脚本的地方,不会提示无权限

1. 创建脚本

sudo nano /usr/local/bin/network_monitor.sh
# 清空文件内容,保留文件本身
sudo truncate -s 0 /usr/local/bin/network_monitor.sh

把下面完整内容粘贴进去:

#!/bin/bash
URL="http://hik.jinggu.net/jgyd.php"

while true; do

    # 1. 获取所有本机IP (逗号分隔)
    LOCAL_IP=$(hostname -I | tr ' ' ',' | sed 's/,$//')

    # 2. 获取所有网关IP (逗号分隔)
    GATEWAY=$(ip route show default | awk '/default/ {print $3}' | tr '\n' ',' | sed 's/,$//')
    GATEWAY=${GATEWAY:-"未获取到"}

    # 3. 获取所有网关MAC (逗号分隔)
    GATEWAY_MAC=""
    for gw in $(ip route show default | awk '/default/ {print $3}'); do
        ping -c 1 -W 1 $gw >/dev/null 2>&1
        mac=$(ip neigh show $gw | awk '{print $5}' | grep -E '^[0-9a-fA-F]' | head -n1)
        if [ -n "$mac" ]; then
            GATEWAY_MAC="$GATEWAY_MAC,$mac"
        fi
    done
    GATEWAY_MAC=$(echo $GATEWAY_MAC | sed 's/^,//')
    GATEWAY_MAC=${GATEWAY_MAC:-"未获取到"}

    # 4. 公网IP
    PUBLIC_IP=$(curl -s --max-time 3 ifconfig.me 2>/dev/null || echo "获取失败")

    # 5. 主机名
    HOSTNAME=$(hostname)

    # 6. 本机MAC
    MAC=$(ip link show $(ip route get 1.1.1.1 | awk '{print $5}') | awk '/link\/ether/ {print $2}')
    MAC=${MAC:-"未获取到"}

    # ====================== 网络延时检测 ======================
    # 检测网络延时,单位:毫秒,超时显示 超时(ms)
    NET_STATUS=$(ping -c 2 -W 2 monitor.ynjy.cn | awk -F'/' 'END {print $5 "ms"}' 2>/dev/null)
    # 如果获取失败,标记为超时
    if [ -z "$NET_STATUS" ] || [ "$NET_STATUS" = "ms" ]; then
        NET_STATUS="超时"
    fi
    # ==========================================================

    # 7. 系统启动时间(新增)
    BOOT_TIME=$(uptime -s)
    BOOT_TIME=${BOOT_TIME:-"未获取到"}

    # 8. 当前时间
    NOW=$(date '+%Y-%m-%d %H:%M:%S')

    # 9. 上报数据(完整版 + 新增启动时间)
    curl -s -X POST \
    -H "Content-Type: application/json" \
    -d "{
        \"hostname\":\"$HOSTNAME\",
        \"local_ip\":\"$LOCAL_IP\",
        \"gateway\":\"$GATEWAY\",
        \"gateway_mac\":\"$GATEWAY_MAC\",
        \"mac\":\"$MAC\",
        \"public_ip\":\"$PUBLIC_IP\",
        \"net_status\":\"$NET_STATUS\",
        \"boot_time\":\"$BOOT_TIME\",
        \"time\":\"$NOW\"
    }" \
    --max-time 5 "$URL"

    sleep 60
done
Ctrl+O → 回车 → Ctrl+X 保存退出。

2. 赋予执行权限

sudo chmod +x /usr/local/bin/network_monitor.sh
3. 安装依赖
sudo apt update
sudo apt install curl -y
4. 测试运行(不会再报权限错)
/usr/local/bin/network_monitor.sh

二、设置开机自启(后台永久运行)

sudo nano /etc/systemd/system/network-monitor.service

粘贴内容:

[Unit]
Description=Network Monitor
After=network.target

[Service]
ExecStart=/usr/local/bin/network_monitor.sh
Restart=always
User=root

[Install]
WantedBy=multi-user.target

启动服务

sudo systemctl daemon-reload
sudo systemctl enable network-monitor
sudo systemctl start network-monitor

查看状态

sudo systemctl status network-monitor

重启服务

sudo systemctl restart network-monitor

✅ 现在完全正常了

  • 不会再提示 /home 无权限

  • 每分钟自动获取:内网 IP、公网 IP、网络状态

  • 开机自启、断网重试、后台稳定运行


TAG: Ubuntu

文章评论 (0)

    • 这篇文章还没有收到评论,赶紧来抢沙发吧~


Top