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

如何为Bash追加写入脚本添加超100行自动新建序列文件功能

Bash 系统监控脚本自动切分日志实现

你可以通过在写入日志前判断当前最新日志文件的行数,实现自动按序号切分文件的需求,完整修改后的脚本如下:

#!/bin/bash
# 日志存储目录
LOG_DIR="/home/neerajR"
# 单文件最大行数
MAX_LINES=100

# 获取所有已存在的trail日志文件,按序号升序排序取最新的一个
current_log=$(ls -v ${LOG_DIR}/trail*.out 2>/dev/null | tail -n 1)

# 无任何日志文件时初始化第一个日志文件
if [ -z "$current_log" ]; then
    current_log="${LOG_DIR}/trail.out"
else
    # 统计当前最新日志的行数,超过阈值则生成新文件
    line_count=$(wc -l < "$current_log")
    if [ $line_count -ge $MAX_LINES ]; then
        # 正则提取当前日志的序号,无序号默认从1开始生成
        if [[ $current_log =~ trail([0-9]+)\.out ]]; then
            next_num=$(( ${BASH_REMATCH[1]} + 1 ))
        else
            next_num=1
        fi
        current_log="${LOG_DIR}/trail${next_num}.out"
    fi
fi

# 原有监控数据采集逻辑
HOME_DISK=$(df --output=avail /home | awk 'FNR == 2 {print}')
VAR_DISK=$(df --output=avail /var | awk 'FNR == 2 {print}')
TOTAL_MEM=$(grep MemTotal /proc/meminfo | awk '{print $2}')
DATE=$(date "+%Y-%m-%d %H:%M:")
# 注:原脚本未定义CPU_USAGE变量,可补充top/sar相关采集逻辑后使用
# CPU采集示例:CPU_USAGE=$(top -bn1 | grep 'Cpu(s)' | sed 's/.*, *\([0-9.]*\)%* id.*/\1/' | awk '{print 100 - $1}')
CPU_USAGE="$DATE CPU: $CPU_USAGE"

# 写入到最终确认的日志文件
echo "$HOME_DISK, $VAR_DISK, $TOTAL_MEM" >> "$current_log"

关键逻辑说明

  • 用ls -v对日志文件按自然序号排序,可避免出现trail10.out排在trail2.out前面的排序异常问题
  • 正则匹配自动识别当前最新日志的序号,首次切分时自动从1开始编号
  • 每次写入前先判断行数阈值,满足条件自动生成下一个序号的新日志文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 23:36:03