需配置logrotate服务实现日志周期性切割、压缩与清理:一、修改/etc/logrotate.conf设全局策略;二、在/etc/logrotate.d/下为特定服务建独立配置;三、用size参数按大小触发轮转;四、用olddir归档旧日志并保持权限;五、用-d和-f调试验证。

如果您希望Linux系统自动对日志文件进行周期性切割、压缩与清理,避免磁盘空间被无限制占用,则需正确配置logrotate服务。以下是实现该目标的多种可行方法:
一、修改全局主配置文件 /etc/logrotate.conf
该文件定义系统级默认轮转策略,适用于所有未单独配置的日志路径。修改此处可统一影响大部分系统日志行为。
1、使用文本编辑器打开主配置文件:sudo vi /etc/logrotate.conf
2、确认或添加以下关键参数(示例为推荐生产环境设置):weekly rotate 4 compress delaycompress missingok notifempty dateext create 0644 root root
3、确保包含子配置目录语句未被注释:include /etc/logrotate.d
4、保存并退出编辑器。
二、为特定服务创建独立配置文件
在/etc/logrotate.d/目录下为Nginx、MySQL等服务建立专属规则,可实现精细化控制,且不干扰全局策略。
1、创建新配置文件:sudo vi /etc/logrotate.d/myapp
2、写入如下结构化配置(以/var/log/myapp/app.log为例):/var/log/myapp/app.log { daily rotate 14 compress delaycompress missingok notifempty create 0640 myapp myapp copytruncate }
3、检查语法是否合法:sudo logrotate -d /etc/logrotate.d/myapp
4、验证轮转是否立即生效:sudo logrotate -f /etc/logrotate.d/myapp
三、按文件大小而非时间触发轮转
当某服务日志写入频率不可预测时,仅依赖时间周期可能导致单个日志过大;此时应启用size参数,使logrotate在达到阈值后立即执行切割。
1、编辑对应配置文件(如/etc/logrotate.d/nginx):sudo vi /etc/logrotate.d/nginx
2、将原有daily或weekly行替换为:size +50M
3、保留其他必要参数,例如:rotate 7 compress missingok notifempty create 0640 nginx adm
4、强制运行一次测试:sudo logrotate -fv /etc/logrotate.d/nginx
四、启用日志归档至指定目录并保留原始权限
通过olddir指令可将旧日志统一移入专用归档路径,便于集中备份或审计;同时配合create与copytruncate确保新日志文件持续可用且权限一致。
1、新建归档目录:sudo mkdir -p /var/log/archive/myapp
2、调整配置中路径部分:/var/log/myapp/app.log { daily rotate 30 compress delaycompress missingok notifempty olddir /var/log/archive/myapp create 0640 myapp myapp copytruncate }
3、修正归档目录权限:sudo chown -R myapp:myapp /var/log/archive/myapp
4、手动触发验证:sudo logrotate -f /etc/logrotate.d/myapp
五、调试与强制执行轮转操作
配置完成后,必须验证其有效性,避免因语法错误或路径权限问题导致轮转失败;调试模式可模拟执行全过程而不实际改动文件。
1、以debug模式检查全部配置:sudo logrotate -d /etc/logrotate.conf
2、仅调试某个子配置:sudo logrotate -d /etc/logrotate.d/myapp
3、忽略时间条件强制执行一次轮转:sudo logrotate -f /etc/logrotate.conf
4、查看轮转状态记录文件确认历史:sudo cat /var/lib/logrotate/logrotate.status










