Ubuntu日志轮转的工作机制
Ubuntu系统通过logrotate工具实现日志文件的自动管理,核心目标是防止日志文件无限增长占用磁盘空间,同时保留历史日志以供故障排查。其工作机制可分为配置、触发、执行三大环节,以下是详细流程:
logrotate是Ubuntu默认安装的日志管理工具(可通过logrotate --version验证),支持按时间周期(每日/每周/每月)或文件大小触发轮转,可完成旧日志压缩、删除及新日志创建等操作。
logrotate的配置分为全局配置和应用特定配置:
/etc/logrotate.conf,定义默认行为(如默认轮转周期、压缩格式),并以include /etc/logrotate.d/*.conf指令引入子配置。/etc/logrotate.d/目录,针对不同服务(如Apache、syslog、MySQL)单独设置轮转规则。例如,/etc/logrotate.d/rsyslog管理系统日志(/var/log/syslog),/etc/logrotate.d/apache2管理Apache访问日志。应用特定配置文件中的参数决定了轮转行为,常见参数包括:
daily(每天)、weekly(每周)、monthly(每月),优先级高于size参数。size 50M(当日志文件达到50MB时立即轮转),可与周期参数组合使用。rotate 7(保留7个旧日志文件,超出部分自动删除)。compress(使用gzip压缩旧日志,命名为log.1.gz、log.2.gz等);delaycompress(延迟压缩,当前轮转的log.1暂不压缩,下次轮转时再处理)。missingok(日志文件不存在时不报错);notifempty(日志文件为空时不轮转)。create 0640 root adm(轮转后创建新日志文件,权限为640,属主为root,属组为adm)。logrotate主要通过定时任务自动运行,也可手动触发:
cron.daily目录下设有logrotate脚本(/etc/cron.daily/logrotate),每天定时调用/usr/sbin/logrotate /etc/logrotate.conf,检查所有日志文件是否符合轮转条件。sudo logrotate -f /etc/logrotate.conf强制轮转(-f表示忽略周期限制,立即执行);使用sudo logrotate -d /etc/logrotate.d/apache2模拟轮转(-d表示调试模式,仅输出操作步骤而不实际执行)。当logrotate运行时,针对每个配置的日志文件,执行以下步骤:
SIGHUP),避免数据丢失。/var/log/syslog→/var/log/syslog.1),若启用compress则进一步压缩为.gz格式(如/var/log/syslog.1.gz)。create参数创建新的空日志文件,确保应用程序可继续写入。postrotate脚本中调用/etc/init.d/rsyslog reload),此步骤由配置中的postrotate和endscript包裹。logrotate通过/var/lib/logrotate/status文件记录每个日志文件的最后轮转时间,避免重复或遗漏。例如,文件中会包含类似"/var/log/syslog" 2025-10-29-10:00:01的条目,表示该日志上次轮转时间为2025年10月29日10点。
通过上述机制,Ubuntu系统实现了日志文件的自动化管理,既保证了日志的可追溯性,又避免了磁盘空间的过度消耗。用户可根据实际需求调整配置参数(如增加保留数量、修改压缩格式),优化日志管理策略。