服务器长ping,traceroute

服务功能描述:对IP地址进行长时间的Ping测试和Traceroute跟踪,并将日志按日进行分类管理。该服务具有后台守护进程,能够实现开机自启动

1.将ip_ping_daemon.sh ip_tracer_daemon.sh脚本放到/usr/local/bin/下

ip_ping_daemon.sh

bash 复制代码
#!/bin/bash


BASE_LOG_DIR="/var/log/ip_ping"

# === IP 列表 ===
IPS=(
"192.168.24.32"
"192.168.28.6"
"192.168.24.227"
"192.168.27.172"
"192.168.24.234"
"192.168.27.176"
"192.168.25.166"
"192.168.24.225"
"192.168.27.168"
"192.168.24.43"
"192.168.27.178"
"192.168.27.180"
"192.168.25.165"
"192.168.24.31"
"192.168.25.170"
"192.168.25.177"
"192.168.27.179"
"192.168.25.168"
"192.168.28.23"
"192.168.27.163"
"192.168.27.152"
"192.168.27.154"
"192.168.27.177"
"192.168.27.151"
"192.168.24.36"
"192.168.27.159"
"192.168.28.26"
"192.168.27.155"
)

# 最大并发数
MAX_JOBS=30


# === 单 IP ping 无限循环(含每日目录切换)===
ping_ip_loop() {
    local ip="$1"

    while true; do
        # 每一轮动态刷新日期目录(确保每天自动创建新目录)
        local TODAY=$(date '+%Y-%m-%d')
        local LOG_DIR="${BASE_LOG_DIR}/${TODAY}"
        mkdir -p "$LOG_DIR"

        local logfile="${LOG_DIR}/${ip}.log"

        echo "==========================" | tee -a "$logfile"
        echo "[$(date '+%Y-%m-%d %H:%M:%S')] Start timed ping $ip ..." | tee -a "$logfile"

        # ping 60 秒(避免无限阻塞,确保每天能自动切换目录)
        timeout 60 ping "$ip" | while IFS= read -r line; do
            echo "[$(date '+%Y-%m-%d %H:%M:%S')] $line" | tee -a "$logfile"
        done

        echo "[$(date '+%Y-%m-%d %H:%M:%S')] Ping loop for $ip ended. Restarting..." | tee -a "$logfile"

        sleep 1
    done
}


# === 并发控制 ===
current_jobs=0

for ip in "${IPS[@]}"; do
    ping_ip_loop "$ip" &
    ((current_jobs++))

    # 控制并发数量
    if (( current_jobs >= MAX_JOBS )); then
        wait -n
        ((current_jobs--))
    fi
done

wait

ip_tracer_daemon.sh

bash 复制代码
#!/bin/bash
BASE_LOG_DIR="/var/log/ip_tracer"

IPS=(
"192.168.24.32"
"192.168.28.6"
"192.168.24.227"
"192.168.27.172"
"192.168.24.234"
"192.168.27.176"
"192.168.25.166"
"192.168.24.225"
"192.168.27.168"
"192.168.24.43"
"192.168.27.178"
"192.168.27.180"
"192.168.25.165"
"192.168.24.31"
"192.168.25.170"
"192.168.25.177"
"192.168.27.179"
"192.168.25.168"
"192.168.28.23"
"192.168.27.163"
"192.168.27.152"
"192.168.27.154"
"192.168.27.177"
"192.168.27.151"
"192.168.24.36"
"192.168.27.159"
"192.168.28.26"
"192.168.27.155"
)

MAX_JOBS=30


# === 单 IP traceroute 无限守护循环(支持每日切换目录)===
trace_ip_loop() {
    local ip="$1"

    while true; do
        # 每一轮 traceroute 前动态刷新目录
        local TODAY=$(date '+%Y-%m-%d')
        local LOG_DIR="${BASE_LOG_DIR}/${TODAY}"
        mkdir -p "$LOG_DIR"

        local logfile="${LOG_DIR}/${ip}.log"

        echo "==========================" | tee -a "$logfile"
        echo "[$(date '+%Y-%m-%d %H:%M:%S')] Tracing route to $ip..." | tee -a "$logfile"

        # traceroute 本身执行一次自动结束
        traceroute -n "$ip" | while IFS= read -r line; do
            echo "[$(date '+%Y-%m-%d %H:%M:%S')] $line" | tee -a "$logfile"
        done

        echo "[$(date '+%Y-%m-%d %H:%M:%S')] Tracing $ip completed. Restarting..." | tee -a "$logfile"

        sleep 1
    done
}


# === 并发控制 ===
current_jobs=0

for ip in "${IPS[@]}"; do
    trace_ip_loop "$ip" &
    ((current_jobs++))

    if (( current_jobs >= MAX_JOBS )); then
        wait -n
        ((current_jobs--))
    fi
done

wait

2,将两个脚本设置为守护进程

vi /etc/systemd/system/ip-ping.service

bash 复制代码
[Unit]
Description=IP Ping Monitoring Daemon
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/ip_ping_daemon.sh
Restart=always
RestartSec=5
StandardOutput=null
StandardError=null

[Install]
WantedBy=multi-user.target

vi /etc/systemd/system/ip-tracer.service

bash 复制代码
[Unit]
Description=IP Traceroute Daemon
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/ip_tracer_daemon.sh
Restart=always
RestartSec=5

# 不要输出到 journal,所有内容在每个 IP 日志里
StandardOutput=null
StandardError=null

[Install]
WantedBy=multi-user.target

systemctl daemon-reload

3,启动且自启服务,进行验证

chmod +x /usr/local/bin/ip_ping_daemon.sh

chmod +x /usr/local/bin/ip_tracer_daemon.sh

systemctl start ip-ping.service &&systemctl enable ip-ping.service && systemctl status ip-ping.service

systemctl start ip-tracer.service &&systemctl enable ip-tracer.service && systemctl status ip-tracer.service

日志验证

cd /var/log/

ip_ping/ ip_tracer/ 生成这两个目录进入看即可

相关推荐
M1582276905516 分钟前
四通道全能组网!SG-Canet-410 CAN转以太网网关,破解工业CAN通信瓶颈
linux·运维·服务器
誰能久伴不乏16 分钟前
【Qt实战】工业级多线程串口通信:从底层协议设计到完美收发闭环
linux·c++·qt
犀思云22 分钟前
企业端到端NaaS连接的优势与应用
网络·人工智能·机器人·智能仓储·专线
bjxiaxueliang25 分钟前
一文解决蓝牙连接难题:Ubuntu命令行蓝牙强制配对
linux·ubuntu·蓝牙连接命令
Godspeed Zhao36 分钟前
现代智能汽车系统——总线技术1
网络·汽车·php
JoySSLLian37 分钟前
IP SSL证书:一键解锁IP通信安全,高效抵御网络威胁!
网络·人工智能·网络协议·tcp/ip·ssl
浪客灿心1 小时前
Linux库制作与原理
linux·运维·服务器
bantinghy1 小时前
Nginx基础加权轮询负载均衡算法
服务器·算法·nginx·负载均衡
成为你的宁宁1 小时前
【Linux Swap 交换分区:定义、作用与操作指南】
linux·交换分区
汽车仪器仪表相关领域1 小时前
MTX-A 模拟废气温度(EGT)计 核心特性与车载实操指南
网络·人工智能·功能测试·单元测试·汽车·可用性测试