如何追踪非手动触发的系统意外重启的发起进程、应用或脚本
我运行了
last -x得到以下输出:pi pts/0 fe80::ee35:7d68: Fri Feb 9 07:56 still logged in runlevel (to lvl 3) 5.4.51-v7+ Thu Feb 8 20:50 still running pi tty1 Thu Feb 8 20:41 gone - no logout reboot system boot 5.4.51-v7+ Thu Jan 1 00:00 still running runlevel (to lvl 3) 5.4.51-v7+ Thu Feb 8 15:00 - 20:50 (05:49)可以看到有一次意外重启,但我确定不是手动执行的命令导致的,请问该如何追踪发起重启的进程、应用或脚本?
碰到这种莫名的重启确实让人头疼,我来分享几个实用的排查步骤,帮你找出根源:
深挖系统日志细节
首先查看/var/log/syslog(树莓派默认的系统日志文件),搜索和重启、关机相关的条目,命令如下:grep -i 'reboot\|shutdown\|init' /var/log/syslog这里可能会找到发起重启的进程ID(PID)、进程名称甚至具体的调用者信息,比如如果是某个脚本调用了
reboot命令,日志里通常会留下痕迹。用
journalctl排查systemd相关操作
树莓派现在默认用systemd,可以通过journalctl工具获取更精准的重启相关记录:journalctl -u systemd-logind.service | grep -i 'reboot\|poweroff'这个命令会聚焦登录管理器的操作日志,能看到是哪个用户、哪个会话触发的重启。另外还可以按时间范围筛选日志,缩小排查范围,比如针对你看到的15:00左右的重启:
journalctl --since "2024-02-08 14:40" --until "2024-02-08 15:10"仔细翻阅这段时间的日志,找有没有异常的进程调用、服务启停记录。
检查定时任务
定时任务是常见的自动重启触发源,先检查当前用户的定时任务:crontab -l再检查系统级的定时任务配置:
cat /etc/crontab ls -l /etc/cron.d/另外也别忘了查看
anacron的配置(/etc/anacrontab),它负责处理周期性的系统任务,也可能触发重启。利用审计日志追踪操作
如果你的系统开启了auditd服务,可以用ausearch工具查找所有和reboot相关的操作记录:ausearch -k reboot要是没开启
auditd,也可以看看用户的命令历史,但注意后台进程或脚本触发的重启可能不会留下这个记录,聊胜于无:history | grep -i reboot排除硬件或驱动问题
虽然你认为是进程触发的,但也不能完全排除硬件因素,比如树莓派过热、电源供电不稳都可能导致自动重启。可以用以下命令检查硬件相关日志:dmesg | grep -i error\|warning\|thermal再查看CPU温度确认是否过热:
cat /sys/class/thermal/thermal_zone0/temp | awk '{print $1/1000 "℃"}'
备注:内容来源于stack exchange,提问作者user2304458

