这里举例,监控内核日志,如果超过100M就清理:
#!/bin/bash
# 指定保存日志的目录
LOG_DIR="/home/nav/.kerenl_log_dir/"
mkdir -p "$LOG_DIR"
# 获取当前日期时间,格式化为YYYY-MM-DD,用于文件名
TIMESTAMP=$(date +"%Y-%m-%d_%H:%M:%S")
TAIL="_kernel_log"
LOG_FILE="$LOG_DIR$TIMESTAMP$TAIL"
# 判断LOG_DIR目录大小的函数
check_and_clean() {
local dir_size
while true; do
dir_size=$(du -sm "$LOG_DIR" | cut -f1)
if [ "$dir_size" -le 100 ]; then
# 目录大小已经小于等于100MB,跳出循环
break
fi
# 获取所有日志文件,按修改时间排序
oldest_file=$(ls -tr "$LOG_DIR"* | head -n1)
if [ -n "$oldest_file" ]; then
echo "Directory size exceeds 100MB. Removing the oldest log file: $oldest_file"
rm -f "$oldest_file"
else
echo "No more files to remove in directory, but size still exceeds limit. Check for non-log files or incorrect permissions."
break
fi
done
}
# 在写入新日志前检查并清理
check_and_clean
sudo journalctl -k >> "$LOG_FILE"
sudo journalctl -k -f >> "$LOG_FILE" &