温馨提示×

centos syslog为何不记录

小樊
48
2026-09-24 05:12:14
栏目: 智能运维

在 CentOS 上 syslog 不记录日志 是很常见的问题,原因通常集中在 服务未运行、配置错误、权限问题或改用 rsyslog/journald 上。下面按最常见原因逐一排查。


一、CentOS 7/8 默认已不是 syslog,而是 rsyslog

从 CentOS 7 开始,系统使用的是 rsyslog,而不是传统 syslog:

ps aux | grep rsyslog

如果没有运行:

systemctl status rsyslog
systemctl start rsyslog
systemctl enable rsyslog

如果你说的是 /var/log/messages 没日志,那其实是 rsyslog 在管。


二、rsyslog 服务未启动(最常见)

systemctl status rsyslog

如果看到 inactive (dead):

systemctl start rsyslog

三、日志被 systemd-journald 接管

CentOS 7+ 默认:

  • systemd-journald 收集所有日志
  • rsyslog 从 journal 中读取并写入文件

如果 journal 正常但文件没日志:

journalctl -xe

确认 rsyslog 是否从 journal 读取:

grep Imuxsock /etc/rsyslog.conf

四、/etc/rsyslog.conf 配置问题

检查关键配置是否存在:

grep -E "*.info|/var/log/messages" /etc/rsyslog.conf

正常应有类似:

*.info;mail.none;authpriv.none;cron.none    /var/log/messages

修改后重启:

systemctl restart rsyslog

五、磁盘或 inode 满

df -h
df -i

如果 /var 满了,rsyslog 会停止写日志。


六、日志文件权限问题

ls -l /var/log/messages

正常权限:

-rw------- 1 root root

修复:

chown root:root /var/log/messages
chmod 600 /var/log/messages
systemctl restart rsyslog

七、SELinux 导致不记录

临时测试:

setenforce 0

如果恢复记录:

grep rsyslog /var/log/audit/audit.log

八、应用没调用 syslog

例如 C 程序:

openlog("myapp", LOG_PID, LOG_LOCAL0);
syslog(LOG_INFO, "test");
closelog();

并确认:

local0.*    /var/log/local0.log

九、日志被 logrotate 截断

ls -l /var/log/messages*

如果是 0 字节:

logrotate -f /etc/logrotate.conf

快速排查清单(建议按顺序)

systemctl status rsyslog
journalctl -xe
df -h
df -i
ls -l /var/log/messages
systemctl restart rsyslog

如果你能补充:

  • CentOS 版本(cat /etc/redhat-release)
  • 不记录的是 系统日志 还是 某应用日志
  • 是否有 /var/log/messages 或 /var/log/secure

我可以给你更精确的解决方案。

0 踩