使用bash写一个脚本,生成日志文件,设置日志留存天数的变量,文件名由log_日期_文件编号构成。再设置4个变量ping间隔、连续ping次数、丢包率、网口名称,每3秒ping一次192.168.3.1,连续ping3次,如果丢包率大于50%,则通过指令route -n检查是否有169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 wlan0这一行,如果没有则发送指令 route add -net 169.254.0.1 dev 网口名称,打印ping失败。延迟200毫秒后继续循环。 程序开始运行时, 1、获取最新的日志文件编号,如果没有当天的日志则生成一个。 2、如果有则顺延编号生成新的日志文件。 3、每个生成的日志文件大小不大于1M。如果写入新日志时,文件超过1M则顺延编号生成新的日志文件。 4、如果有超过设置的天数的日志,则删除。
以下是一个符合你要求的 Bash 脚本。这个脚本会生成日志文件,设置日志留存天数,并根据指定的条件进行 ping 操作和路由检查。
#!/bin/bash
# 配置变量
LOG_DIR="./logs"
LOG_RETENTION_DAYS=7
PING_INTERVAL=3
PING_COUNT=3
PACKET_LOSS_THRESHOLD=50
INTERFACE_NAME="wlan0"
TARGET_IP="192.168.3.1"
LOG_FILE_SIZE_LIMIT=1048576 # 1MB in bytes
# 创建日志目录
mkdir -p $LOG_DIR
# 获取当前日期
current_date=$(date +%Y%m%d)
# 获取最新的日志文件编号
get_latest_log_file_number() {
latest_file=$(ls $LOG_DIR/log_${current_date}_* 2>/dev/null | sort | tail -n 1)
if [[ -z $latest_file ]]; then
echo 0
else
echo $(basename $latest_file | awk -F'_' '{print $3}')
fi
}
# 生成新的日志文件
generate_new_log_file() {
log_file_number=$(get_latest_log_file_number)
log_file_number=$((log_file_number + 1))
log_file="${LOG_DIR}/log_${current_date}_${log_file_number}"
touch $log_file
echo $log_file
}
# 获取当前日志文件
log_file=$(generate_new_log_file)
# 检查并删除过期日志文件
find $LOG_DIR -type f -name "log_*" -mtime +$LOG_RETENTION_DAYS -exec rm -f {} \;
# 主循环
while true; do
# 检查当前日志文件大小
if [[ $(stat -c%s "$log_file") -ge $LOG_FILE_SIZE_LIMIT ]]; then
log_file=$(generate_new_log_file)
fi
# 执行ping操作
ping_output=$(ping -c $PING_COUNT -i $PING_INTERVAL $TARGET_IP)
packet_loss=$(echo "$ping_output" | grep -oP '\d+(?=% packet loss)')
# 记录ping结果
echo "$(date +'%Y-%m-%d %H:%M:%S') - Ping result: $ping_output" >> $log_file
# 检查丢包率
if [[ $packet_loss -gt $PACKET_LOSS_THRESHOLD ]]; then
route_output=$(route -n)
if ! echo "$route_output" | grep -q "169.254.0.0"; then
route add -net 169.254.0.1 dev $INTERFACE_NAME
echo "$(date +'%Y-%m-%d %H:%M:%S') - Ping failed, route added" >> $log_file
else
echo "$(date +'%Y-%m-%d %H:%M:%S') - Ping failed, route already exists" >> $log_file
fi
fi
# 延迟200毫秒
sleep 0.2
done
日志文件管理:
./logs
目录下生成日志文件,文件名格式为 log_日期_文件编号
。ping 操作:
192.168.3.1
,连续 ping 3 次。延迟:
请确保脚本有执行权限,并在适当的环境中运行。你可以使用 chmod +x script_name.sh
来赋予执行权限���