/dev/log socket缺失是最常见原因,需先systemctl restart systemd-journald.socket再重启rsyslog;若imuxsock模块被注释,须取消注释并用rsyslogd -n1校验语法。

/dev/log socket 缺失是最常见原因
rsyslog 依赖 /dev/log 这个 Unix domain socket 接收本地进程日志。一旦它消失(比如被误删、服务 hang 住、或被其他进程占用),所有通过 syslog() 或 logger 发出的日志都会静默失败,/var/log/messages、/var/log/secure 等立刻变空。
- 运行
ls -l /dev/log,正常应看到类似srw-rw-rw-. 1 root root 0 ... /dev/log;若提示No such file or directory,就是 socket 缺失 - 不要直接
touch /dev/log—— 它不是普通文件,而是 socket,必须由服务重建 - 优先执行:
systemctl restart systemd-journald.socket(先恢复 socket 创建能力),再systemctl restart rsyslog - 如果
systemd-journald.socket启动失败,检查journalctl -u systemd-journald.socket -n 30是否有权限或 SELinux 拒绝记录
rsyslog 配置中 imuxsock 模块未启用
CentOS 7+/RHEL 7+ 默认配置常把 imuxsock 模块注释掉,导致 rsyslog 虽然运行,但根本没监听 /dev/log。此时服务状态是 active,但日志流被“堵死”在入口。
- 执行
grep -r "imuxsock" /etc/rsyslog.conf /etc/rsyslog.d/,确认是否含module(load="imuxsock") - 若无,编辑
/etc/rsyslog.conf,取消以下行的注释(或手动添加):module(load="imuxsock") - 注意:有些旧版配置用的是
$ModLoad imuxsock,新语法统一用module(load="..."),混用会导致加载失败 - 改完后务必运行
rsyslogd -N1校验语法,再systemctl restart rsyslog
rsyslog 启动失败但 systemctl status 显示 active
Linux AI 服务器 — 将 Linux 服务器转换为本地 AI 推理集群。使用 systemd、NVIDIA CUDA 实现无头 Linux AI,零 GUI 开销。
某些情况下,systemctl status rsyslog 显示 “active (running)”,实际主进程已崩溃或卡在初始化阶段(尤其在模块加载失败、配置路径错误、或 /var/lib/rsyslog 权限异常时)。这时需看真实日志输出。
- 查 rsyslog 自身启动日志:
journalctl -u rsyslog -n 50 -o short-precise,重点找ERROR、Failed to load module、Could not open config file - 验证配置语法:
rsyslogd -N1 -f /etc/rsyslog.conf;若用 include,对每个/etc/rsyslog.d/*.conf单独校验 - 检查
/var/lib/rsyslog目录权限:应为root:root且至少drwx------,否则 imjournal 模块可能无法写入状态文件 - 临时禁用 SELinux 测试:
setenforce 0,再重启 rsyslog;若恢复,说明上下文损坏,需restorecon -Rv /etc/rsyslog*
systemd-journald 抢占或干扰 rsyslog 日志流
在启用 imjournal 模块的系统上,journald 和 rsyslog 共享日志源。若 journald 异常(如磁盘满、索引损坏),rsyslog 可能无法从 journal 读取日志;更常见的是两者配置冲突,例如 journald 将日志设为转发模式但 rsyslog 未监听对应端口。
- 确认 journald 正常:
systemctl status systemd-journald+journalctl -u systemd-journald -n 20 - 检查 rsyslog 是否加载了
imjournal:grep -r "imjournal" /etc/rsyslog.conf /etc/rsyslog.d/;若启用,确保module(load="imjournal")在imuxsock之后 - 若不用 journald 做中转,建议注释掉
imjournal相关行,并确认$OmitLocalLogging on已关闭(否则本地 syslog() 调用会被丢弃) - 测试基础通路:
logger "test from shell",然后tail -n 1 /var/log/messages—— 这步不成功,说明问题仍在 socket 或模块层,而非应用日志逻辑
真正卡住排查的点,往往不在配置语法或服务启停,而在 /dev/log 的存在性、imuxsock 的实际加载状态、以及 rsyslog 与 journald 之间那层看不见的握手是否完成。每次重启前,先 ls -l /dev/log 和 rsyslogd -N1 两步,能绕过 80% 的“明明重启了却没用”场景。










