针对 Linux 服务器自动重启的问题,排查核心在于找到异常关机或内核崩溃的日志记录。以下是专业且系统化的日志查看方法,涵盖常见的 systemd 日志、内核日志、内核转储记录以及硬件相关日志。

1. 使用 journalctl 检查 systemd 日志
现代 Linux 发行版大多使用 systemd,自动重启前的系统状态、服务停止顺序、关机信号或崩溃信息通常记录在 journal 中。推荐按时间维度回溯查看:
journalctl --since "今天" --until "此刻" 或 journalctl -b -1 查看上一次启动(上一次开机)的完整日志。若系统重启了多次,可用 journalctl --list-boots 列出所有启动记录编号,然后通过 journalctl -b 编号 定位到崩溃前的那一次启动日志。重点搜索 “reboot”、“shutdown”、“panic”、“error”、“fail” 等关键词。
2. 查看内核环形缓冲区日志
若系统因内核 panic 或 硬件错误 自动重启,内核日志会写入 /var/log/kern.log(Debian/Ubuntu)或 /var/log/messages(CentOS/RHEL)。使用 dmesg 命令查看当前内核日志,但重启后会丢失,因此更可靠的是查看持久化文件:
grep -i "panic\|oops\|bug\|hardware error\|machine check" /var/log/kern.log
或 grep -i "panic\|oops\|critical" /var/log/messages。
3. 检查 last 与系统重启记录
“last” 命令能够显示所有登录和重启历史。执行 last reboot 可列出系统每次重启的时间点,帮助判断重启的精确时刻。如果重启时间没有对应的人工操作,说明可能是异常触发。结合 last -x | head -50 查看完整的关机、运行级别切换记录。
4. 核对硬件与电源日志
自动重启有时是 电源故障、过热 或 硬件看门狗 导致。查看 /var/log/syslog 或 journalctl -p err 过滤高严重级别日志。对于 IPMI 服务器,可执行 ipmitool sel elist 查看系统事件日志,确认是否有“Power Unit”、“Temperature”或“Watchdog”事件。
5. 使用 kdump 与 crash 分析内核转储
如果配置了 kdump,系统在崩溃时会生成 vmcore 文件。查看 /var/crash/ 目录下的转储文件,并通过 crash 工具或 vmcore-dmesg 提取崩溃时的内核调用栈。这是定位 内核BUG 或 设备驱动异常 的最精准方法。
6. 检查 systemd 服务与看门狗超时
若某个服务在启动或运行时发生严重故障,systemd 的 看门狗 可能主动触发重启。查看 /etc/systemd/system.conf 中的 RuntimeWatchdogSec 和 ShutdownWatchdogSec 配置,同时使用 systemctl status 检查失败服务,journalctl -u 服务名 查看具体服务的重启前异常。
7. 分析 OOM 与资源耗尽
内存耗尽(Out Of Memory)可能触发系统自动重启。检索 grep -i "out of memory\|oom-killer" /var/log/messages 或 journalctl -k | grep -i oom,关注是否有进程被 OOM 杀死后导致系统进入不稳定状态。
8. 查看 cron 计划任务与用户脚本
自动重启也有可能是人为或恶意脚本触发。检查 /etc/crontab、/var/spool/cron/ 以及所有用户的 cron 任务中是否包含 reboot 或 shutdown 命令。
综合建议
在排查时,首先执行 last reboot | head -20 确认重启频率,然后逐层检查 systemd 日志和内核日志。若日志缺失或没有明显错误,请检查 /var/log 目录是否被自动清理,并确保 持久化日志 配置生效(journalctl --flush 与 Storage=persistent)。对于生产服务器,建议配置 kdump 与 远程日志服务器,以便发生异常自动重启后能保留完整的崩溃现场。

查看详情

查看详情