我有一个 VPS,几乎每天都会重启。今天我终于从日志中找到了线索
May 12 03:14:49 sshd[19379]: Did not receive identification string from 173.212.118.167
May 12 03:25:03 sshd[19489]: Did not receive identification string from 82.248.74.71
May 12 03:25:15 sshd[19493]: Did not receive identification string from 98.249.28.85
May 12 03:30:25 shutdown[19545]: shutting down for system halt
May 12 03:30:29 init: Switching to runlevel: 0
May 12 03:30:34 saslauthd[1654]: server_exit : master exited: 1654
May 12 03:30:34 sshd[1656]: Received signal 15; terminating.
May 12 03:30:34 sshd[1655]: Received signal 15; terminating.
May 12 03:30:35 kernel: Kernel logging (proc) stopped.
May 12 03:30:35 kernel: Kernel log daemon terminating.
May 12 03:30:35 syslog-ng[364]: Termination requested via signal, terminating;
May 12 03:30:35 syslog-ng[364]: syslog-ng shutting down; version='3.2.2'
May 12 03:34:23 syslog-ng[388]: syslog-ng starting up; version='3.2.2'
May 12 03:34:24 ifup: lo
May 12 03:34:24 ifup: lo
May 12 03:34:24 ifup: IP address: 127.0.0.1/8
看起来某个进程主动执行了重启。这种情况似乎每天都在同一个时间发生。幸运的是,停机时间很短。
我检查了 cron 作业,看是否有相关条目,但一无所获。奇怪的是,重新启动通常是在运行级别 6 而不是 0 下执行的。运行级别 0 应该关闭服务器,但它却在几秒钟后重新启动。
我该怎么做才能找到更多有关此内容的信息?
答案1
根据您的日志,有程序正在shutdown
调用实用程序来执行关机。我会(暂时)/sbin/shutdown
用一个记录大量信息的脚本替换它,如下所示:
#!/bin/bash
set > /shutdown.env
ps auxfwww > /shutdown.ps
然后,您可以查找PPID=
并/shutdown.env
查看/shutdown.ps
该 pid 是什么。
chmod +x
(将脚本放到位后不要忘记。我会运行一次以确保它有效)。
答案2
日志中的此行init: Switching to runlevel: 0
并不意味着未使用运行级别 6:可能已经使用,因为您的服务器确实重新启动了。
检查last reboot
这是否是常规事件。如果是,请重新检查所有 cron 作业;last 还会向您显示服务器重启时登录的用户。
检查 sudo 日志(您可能需要启用 sudo 日志记录)。
auditctl -a entry,always -S reboot
您还可以尝试使用描述的审计机制
这里