基于Bash实现每日动态IP列表的定时自动化Ping测试问询
解决方案:每日动态IP列表的定时Ping测试系统
我来帮你搭建一套完全符合需求的定时Ping测试方案,分核心脚本、定时任务和切换逻辑三个部分来实现:
1. 主Ping测试脚本 (ping.sh)
这个脚本负责读取传入的IP列表文件,每10分钟自动执行一轮Ping测试,同时把结果按日期归档到日志文件里,方便后续追溯。
#!/bin/bash # 检查是否传入了IP列表参数,没传的话提示用法 if [ $# -ne 1 ]; then echo "用法: $0 <IP列表文件路径>" exit 1 fi IP_LIST=$1 # 按当前日期生成日志文件名,比如ping_results_20240401.log LOG_FILE="ping_results_$(date +%Y%m%d).log" # 循环每10分钟执行一次Ping测试 while true; do echo "=== 测试启动时间: $(date '+%Y-%m-%d %H:%M:%S') ===" >> $LOG_FILE # 遍历IP列表,每个IP发4个Ping包(参数可按需调整) while read -r IP; do # 跳过空行 if [[ -n $IP ]]; then ping -c 4 "$IP" >> $LOG_FILE 2>&1 echo "--- 分割线 ---" >> $LOG_FILE fi done < "$IP_LIST" # 等待10分钟(600秒)后执行下一轮 sleep 600 done
2. 每日IP切换辅助脚本 (switch_ping_task.sh)
每天0点自动生成新的IP列表,然后替换掉正在运行的Ping任务,确保用当天的新IP测试。
#!/bin/bash # 生成当日的IP列表文件名,比如IPlist_20240401.txt TODAY=$(date +%Y%m%d) NEW_IP_LIST="IPlist_${TODAY}.txt" # --- 这里替换成你的IP列表生成逻辑 --- # 比如从数据库/API拉取100个IP,或者执行你的生成脚本 # example_generate_ip_script.sh > $NEW_IP_LIST # --- 生成逻辑结束 --- # 杀掉之前运行的ping.sh进程,避免多个实例同时跑 pkill -f "sh ping.sh" # 后台启动新的Ping任务,把输出丢去/dev/null避免终端阻塞 nohup sh ping.sh "$NEW_IP_LIST" > /dev/null 2>&1 & echo "已成功切换到当日IP列表: $NEW_IP_LIST,Ping任务已重启"
3. 配置定时任务(Crontab)
用系统的定时任务工具,让辅助脚本每天0点自动运行,同时确保脚本有权限执行。
- 编辑crontab配置:
crontab -e
- 添加以下内容:
# 每天0点整执行IP切换和Ping任务重启 0 0 * * * /绝对路径/switch_ping_task.sh # 可选:开机自动给脚本加执行权限(防止权限丢失) # @reboot chmod +x /绝对路径/ping.sh /绝对路径/switch_ping_task.sh
实用提示
- 日志清理:如果日志文件占空间,可以再加个每周清理旧日志的定时任务,比如删除7天前的日志:
0 0 * * 0 find /日志存放路径 -name "ping_results_*.log" -mtime +7 -delete - 首次启动:配置完后,手动跑一次辅助脚本,启动当天的Ping任务:
sh switch_ping_task.sh & - IP列表校验:可以在辅助脚本里加一段校验,确保生成的IP列表正好有100个IP,避免无效测试:
IP_COUNT=$(wc -l < "$NEW_IP_LIST") if [ $IP_COUNT -ne 100 ]; then echo "错误:生成的IP列表只有$IP_COUNT个,不是100个" exit 1 fi
内容的提问来源于stack exchange,提问作者user183980
相关产品推荐
相关产品推荐

