温馨提示×

centos syslog为何不写

小樊
48
2026-10-17 13:55:34
栏目: 智能运维

在 CentOS 上 syslog 不写日志 通常是因为服务没起来、配置改错、或被其它日志系统(如 systemd-journald)接管了。下面按最常见原因逐步排查。


一、先确认你用的是哪种 syslog

CentOS 不同版本默认不同:

  • CentOS 6:rsyslog(或 syslog)
  • CentOS 7/8/Stream:rsyslog + systemd-journald
ps -ef | grep -E 'rsyslog|syslog'

如果没有 rsyslogd 进程,说明服务没运行。


二、最常见原因 & 解决办法

1️⃣ rsyslog 服务没启动

systemctl status rsyslog

若未运行:

systemctl start rsyslog
systemctl enable rsyslog

2️⃣ 配置文件错误导致启动失败

rsyslogd -N1

或查看错误:

journalctl -xe | grep rsyslog

常见错误:

  • 写错了 .conf
  • 日志文件路径不存在
  • 权限不足

3️⃣ 日志目录或文件权限问题

例如 /var/log 权限异常:

ls -ld /var/log

修复示例:

chown root:root /var/log
chmod 755 /var/log

如果自定义日志文件:

touch /var/log/my.log
chown syslog:adm /var/log/my.log

4️⃣ 被 systemd-journald 接管(CentOS 7+)

CentOS 7 以后:

  • 很多日志 只进 journal,不写文件

查看:

journalctl -xe

如果你想让 rsyslog 从 journal 取日志:

# /etc/rsyslog.conf
module(load="imjournal")

然后重启:

systemctl restart rsyslog

5️⃣ 配置里把日志关了 / 写错规则

检查:

grep -R "*.info" /etc/rsyslog.conf /etc/rsyslog.d/

错误示例(不写文件):

*.*   /dev/null

6️⃣ 磁盘满 / inode 满

df -h
df -i

磁盘满时 syslog 会直接停止写。


7️⃣ SELinux 拦截(少见但存在)

ausearch -m avc -ts recent

临时验证:

setenforce 0

三、快速自检清单 ✅

systemctl status rsyslog
rsyslogd -N1
ls -l /var/log
df -h
journalctl -u rsyslog

四、如果你愿意,我可以更精准帮你

请告诉我:

  1. CentOS 版本(cat /etc/redhat-release)
  2. 不写的是 哪个日志(如 /var/log/messages?自定义?)
  3. systemctl status rsyslog 输出
  4. 是否改过 /etc/rsyslog.conf

我可以直接帮你定位是哪一条导致的。

0 踩