长话短说 - 我不知怎么搞砸了 Centos 7 服务器上的 rsyslogd 服务。现在 /var/log/messages 中只显示以下内容:
12 月 14 日 22:13:27 {myhostname} rsyslogd:[origin software="rsyslogd" swVersion="7.4.7" x-pid="1286" x-info="http://www.rsyslog.com"] 于信号 15 退出。
12 月 14 日 22:13:27 {myhostname} rsyslogd:[原始软件=“rsyslogd”swVersion=“7.4.7”x-pid=“1477”x-info=“http://www.rsyslog.com”] 启动
其他日志(secure、cron 等)也是空的。重新启动服务和服务器没有帮助。使用记录器发送的消息不会出现在 /var/log/messages 文件中。rsyslogd 服务正在运行。配置文件似乎是正确的。我可以在 journalctl 日志中看到所有事件。我已经搜索了几篇与我的问题类似的帖子,但没有一篇有解决方案。
虽然最快的解决方案可能是重新安装服务器,但我想弄清楚是什么导致了这个问题以及如何解决它,以防将来再次发生。服务器正在运行简单的 LEMP 堆栈,对系统的最后一次重大更改是主机名更改。
答案1
这是解决方案,但不是永久的:
rm -f /var/lib/rsyslog/imjournal.state
服务 rsyslog 重启
答案2
我的 rsyslogd.service 拒绝启动显示
Failed to start System Logging Service.
Unit rsyslog.service entered failed state.
rsyslog.service failed.
rsyslog.service holdoff time over, scheduling restart.
start request repeated too quickly for rsyslog.service
Failed to start System Logging Service.
Unit rsyslog.service entered failed state.
rsyslog.service failed.
我终止了该服务以确保它没有运行
killall rsyslogd
然后删除 pid 文件
rm /var/run/syslogd.pid
并再次启动服务
systemctl start rsyslog.service
现在状态正常
# systemctl status rsyslog.service
● rsyslog.service - System Logging Service
Loaded: loaded (/usr/lib/systemd/system/rsyslog.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2018-02-06 11:32:33 CET; 2s ago
并且 /var/log/*log 文件又开始增长。
答案3
您可以尝试调试 rsyslog找出导致其故障的问题。
从正在运行的实例获取调试信息
可以从正在运行的实例中获取调试信息,但这需要进行一些设置。我们假设实例在后台运行,因此不需要将调试输出到 stdout。因此,所有调试信息都需要进入日志文件。
要创建此设置,您需要将
RSYSLOG_DEBUGLOG
环境变量指向一个可在运行时访问的文件(我们强烈建议使用本地文件系统中的文件!),如果您不以交互方式运行 rsyslogdRSYSLOG_DEBUG
,则至少要DebugOnDeman NoStdOut
确保在正确的(发行版特定的)启动脚本中设置这些环境变量这些设置启用了对 SIGUSR1 做出反应的能力。收到信号后,将切换调试状态。因此,发送一个信号以打开调试日志,再次发送该信号以再次关闭调试日志。第三次将再次打开...依此类推。
在典型的系统中,您可以按如下方式向 rsyslogd 发出信号:
kill -USR1 `cat /var/run/rsyslogd.pid`
重要提示:反引号在“cat”命令周围。如果使用常规引号,则不起作用。调试日志将显示调试日志记录是否已打开或关闭。没有其他状态指示。
此处提供分步操作方法:如何使用按需调试?
答案4
就我的情况而言,这是因为 rsyslog 和 syslog-ng 都已安装,并且它们争相控制系统上的日志记录。卸载 syslog-ng(使用yum remove syslog-ng
)并重新启动即可解决问题。