我不小心删除了 /var/log/syslog,以为系统会自动重新创建它(但没有)。
我使用touch /var/log/syslog
并重新启动了 rsyslog,但系统仍然没有记录任何内容。我还重新启动了整个服务器,但无济于事。
的输出 ls -l /var/log/syslog
是
-rwxrwxr-x 1 root root 0 Oct 27 13:16 syslog
我怎样才能让系统再次开始记录系统日志?
致未来读者的说明
重新启动 rsyslog 确实解决了这个问题。第一次没有用是因为我使用 创建了文件“syslog” touch /var/log/syslog
。
解决方案是删除/var/log/syslog
。然后运行sudo service rsyslog restart
TLDR;不要自己创建文件。删除 syslog,然后重新启动 rsyslog(它将为您创建 syslog)。问题解决了。
答案1
rsyslog 应该在重新启动后重新创建该文件(具有正确的权限):
# mv /var/log/syslog /tmp/
# /etc/init.d/rsyslog restart
[ ok ] Restarting rsyslog (via systemctl): rsyslog.service.
# dir /var/log/syslog
-rw-r----- 1 root adm 327 Oct 27 13:28 /var/log/syslog
也许尝试强制日志条目以确保它正在运行:
# /usr/bin/logger -p0 foo
# tail /var/log/syslog
...
Oct 27 13:31:39 myserver root: foo
答案2
即使文件已被删除,rsyslog 使用的文件句柄可能仍然打开并正在写入。lsof
可以用来验证这一点,如果您想查看日志写入的位置,还可以告诉您该进程打开了哪些文件。pidof rsyslogd | xargs lsof -p
答案3
这可能是 SELinux 的问题。当您触摸文件时,您会创建一个与日志元素所需的 MAC 权限不兼容的 MAC 标签。允许启动创建文件会附加正确的 MAC 标签。即使您更改了文件权限 (DAC),您仍然可能会遇到问题。
答案4
重新创建文件
跑步restorecon -v /yoursyslogdeletedfile
跑步systemctl reload rsyslog