银河麒麟系统需配置logrotate防止/var分区写满:确认logrotate已安装并检查/etc/logrotate.conf和/etc/logrotate.d/rsyslog;编辑rsyslog配置启用daily轮转、rotate 7、compress等策略;手动执行sudo logrotate -f测试归档生成;验证cron定时任务正常运行。

银河麒麟系统日志持续写入导致/var分区使用率飙升至95%以上,服务频繁报“no space left on device”,必须立即配置logrotate防止磁盘写满引发系统崩溃。
确认logrotate已安装并检查默认配置
银河麒麟V10默认已预装logrotate,无需额外安装。先验证是否可用:logrotate --version。若返回版本号(如3.18.x),说明工具就绪。
检查主配置文件是否存在且可读:sudo ls -l /etc/logrotate.conf。该文件定义全局轮转策略,不可删除或权限设为000,否则整个logrotate将失效。
重点查看rsyslog专用配置:sudo cat /etc/logrotate.d/rsyslog。若输出为空或仅含注释行,说明系统未自动配置主日志轮转——这正是磁盘爆满的常见根源。
配置rsyslog主日志轮转规则
用root权限编辑rsyslog轮转配置文件:sudo nano /etc/logrotate.d/rsyslog。
写入以下内容(注意:/var/log/messages路径必须与实际一致;可通过sudo rsyslogd -N1验证当前主日志路径):
/var/log/messages {<br> daily<br> rotate 7<br> compress<br> delaycompress<br> missingok<br> notifempty<br> create 0640 root root<br> sharedscripts<br> postrotate<br> /bin/kill -HUP `cat /var/run/syslogd.pid 2>/dev/null` || true<br> endscript<br>}
其中【rotate 7】表示最多保留7个归档版本,超出后最老的会被自动删除;若业务审计要求保留30天,则需改为rotate 30并确保磁盘有足够余量。
手动触发一次轮转测试效果
执行强制轮转命令:sudo logrotate -f /etc/logrotate.d/rsyslog。
立即检查结果:ls -lt /var/log/messages*。应看到类似/var/log/messages(新空文件)、/var/log/messages.1(刚归档的旧日志)、/var/log/messages.1.gz(若compress生效则为压缩包)。
若只看到messages.1但无.gz后缀,说明compress未生效——此时需确认系统已安装gzip:gzip --version,缺失则运行sudo apt install gzip(Debian系)或sudo yum install gzip(RHEL系)。
这一步操作起来很简单,直接把命令敲进去回车就行,但必须亲眼确认归档文件生成成功才算过关。
启用并验证每日定时任务
logrotate依赖cron每日执行,默认配置已存在于/etc/cron.daily/logrotate。确认其可执行权限:ls -l /etc/cron.daily/logrotate,输出中应含-rwxr-xr-x。
手动模拟cron环境运行一次:sudo run-parts --test /etc/cron.daily,检查输出是否包含logrotate。
为验证定时任务真实生效,将系统时间临时拨快24小时:sudo date -s "$(date -d '+1 day' '+%Y-%m-%d %H:%M:%S')",再等待1分钟,观察/var/log/messages.2是否生成(前提是前一天已成功轮转出.1)。
若未生成,检查sudo systemctl status cron是否active,非活跃状态需执行sudo systemctl enable --now cron。











