Linux服务器在持续运行过程中,各类服务如Nginx、MySQL、应用程序等会不断产生日志内容,如果日志没有合理的管控机制,文件体积会持续增长,最终占满磁盘空间,引发服务不可用、系统崩溃等严重问题,这就是日志溢出。而日志切割是解决该问题的核心手段,通过将大日志按规则拆分、归档、清理,既能保留必要的历史日志,又能避免磁盘被无意义占用。

日志溢出的常见原因
日志溢出通常不是单一因素导致的,常见的原因有以下几种:
- 服务没有配置日志切割规则,日志一直追加写入同一个文件,没有拆分和清理机制。
- 调试阶段开启了过低的日志级别,比如调试级别日志,会输出大量冗余内容,加速日志增长。
- 磁盘本身空间较小,同时运行的业务较多,多个服务的日志共同占用了有限的空间。
- 历史日志没有定期归档清理,过期的日志一直保留在磁盘中,没有被及时删除。
使用logrotate工具实现自动日志切割
logrotate是Linux系统自带的一款日志管理工具,几乎所有主流Linux发行版都默认安装,它可以按照预设的规则自动对日志进行切割、压缩、删除等操作,不需要人工干预。
logrotate基础配置说明
logrotate的主配置文件是/etc/logrotate.conf,通用的切割规则可以写在这个文件中,针对不同服务的个性化规则可以放在/etc/logrotate.d/目录下,文件名可以自定义,logrotate会自动读取该目录下的所有配置文件。
以下是一个针对自定义应用日志的logrotate配置示例,假设应用日志路径为/var/log/myapp/app.log:
/var/log/myapp/app.log {
daily # 每天切割一次日志
rotate 7 # 保留最近7个切割后的日志文件
compress # 切割后的日志进行gzip压缩
delaycompress # 延迟压缩,本次切割的日志下次再压缩
missingok # 如果日志文件不存在,不报错继续下一个
notifempty # 如果日志文件为空,不进行切割
create 0644 root root # 切割后创建新的日志文件,权限0644,属主root属组root
postrotate # 切割后执行的命令,这里重启应用让日志写入新文件
systemctl restart myapp >/dev/null 2>&1 || true
endscript
}
测试logrotate配置
配置完成后,可以先进行调试测试,避免规则错误导致日志处理异常:
# 测试指定配置文件的语法是否正确,不会实际执行切割 logrotate -d /etc/logrotate.d/myapp # 强制立即执行一次日志切割,用于验证效果 logrotate -f /etc/logrotate.d/myapp
手动实现日志切割脚本
如果服务器环境没有logrotate,或者需要更灵活的切割逻辑,也可以编写shell脚本手动实现日志切割,再通过crontab定时执行。
以下是一个简单的日志切割脚本示例:
#!/bin/bash
# 定义日志文件路径
LOG_FILE="/var/log/myapp/app.log"
# 定义备份日志的目录
BACKUP_DIR="/var/log/myapp/backup"
# 定义保留的备份文件数量
KEEP_NUM=7
# 创建备份目录,如果不存在的话
mkdir -p $BACKUP_DIR
# 获取当前日期,作为备份文件后缀
DATE=$(date +%Y%m%d)
# 如果原日志文件存在且大小大于0,进行切割
if [ -s $LOG_FILE ]; then
# 备份原日志文件,添加日期后缀
mv $LOG_FILE $BACKUP_DIR/app_$DATE.log
# 创建新的日志文件,设置权限
touch $LOG_FILE
chmod 0644 $LOG_FILE
# 重启应用,让日志写入新文件,根据实际服务调整命令
systemctl restart myapp >/dev/null 2>&1 || true
fi
# 清理超过保留数量的旧备份文件
# 按文件名排序,删除最老的超出数量的文件
cd $BACKUP_DIR
ls -t app_*.log | tail -n +$(($KEEP_NUM + 1)) | xargs -r rm -f
给脚本添加执行权限后,在crontab中添加定时任务,比如每天凌晨2点执行:
# 编辑crontab任务 crontab -e # 添加以下内容,每天2点执行切割脚本 0 2 * * * /usr/local/bin/cut_log.sh >/dev/null 2>&1
日志管理的最佳实践
为了避免日志溢出问题反复出现,建议遵循以下实践:
- 所有服务的日志都配置切割规则,优先使用logrotate工具,减少运维成本。
- 根据业务需求设置合理的日志保留时长,不需要永久保留所有日志。
- 生产环境将日志级别设置为warn或error,减少冗余日志输出。
- 定期监控磁盘空间使用情况,设置磁盘使用率告警,提前发现问题。
- 重要日志可以同步到远程日志服务器,避免本地磁盘故障导致日志丢失。
logrotateLinux_serverlog_cut修改时间:2026-06-24 09:24:18