Appearance
3. Linux日志配置
定期压缩日志文件
可以添加到crontab里自动执行
bash
#!/bin/bash
# 接收目标目录参数,如果未提供则使用当前目录
TARGET_DIR="${1:-.}"
if [ ! -d "$TARGET_DIR" ]; then
echo "错误: 目录 $TARGET_DIR 不存在"
exit 1
fi
# 进入目标目录
cd "$TARGET_DIR" || exit 1
# 获取今天的日期,格式为 YYYYMMDD
TODAY=$(date +%Y%m%d)
echo "提示: 今天日期为 $TODAY,文件名包含该日期的 txt 文件将被保留。"
found=0
# 查找所有不包含当天日期的 txt 文件,并逐个处理(支持带空格的文件名)
find . -maxdepth 1 -name "*.txt" ! -name "*${TODAY}*" -print0 | while IFS= read -r -d '' file; do
found=1
# 去除开头的 ./
filename="${file#./}"
archive_name="${filename}.tar.gz"
echo "----------------------------------------"
echo "正在处理: $filename"
# 将单个文件打包为独立的 tar.gz
tar -zcvf "$archive_name" "$filename"
# 检查打包是否成功,成功后才删除原 txt 文件
if [ $? -eq 0 ]; then
echo "压缩成功,正在删除原文件: $filename"
rm "$filename"
else
echo "错误: $filename 压缩失败,未删除原文件。"
fi
done
if [ "$found" -eq 0 ]; then
echo "提示: 没有找到需要压缩的 txt 文件(可能不存在,或者所有文件都包含今天的日期)。"
else
echo "----------------------------------------"
echo "所有符合条件的文件处理完成!"
ficrontab日志堆积问题
nano /etc/logrotate.d/my_cron_jobs 去掉里边的 /var/log/cron
nano /etc/logrotate.d/my_cron_jobs 填入
yaml
/etc/logrotate.d/cron
/var/log/cron {
# 每天切割
daily
# 保留最近60份切割文件
rotate 60
maxage 60
# 单文件 200M 时自动切割并压缩
size 200M
compress
missingok
sharedscripts
postrotate
/usr/bin/systemctl -s HUP kill rsyslog.service >/dev/null 2>&1 || true
endscript
}