#!/bin/bash
# 输出标题
echo "=== CentOS 8 系统重启原因排查脚本 ==="
echo "运行时间:$(date)"
echo
# 1. 最近重启记录
echo "=== 最近重启记录 (last reboot) ==="
last reboot
echo
# 2. 检查 watchdog 模块是否加载
echo "=== 检查 watchdog 内核模块 (lsmod | grep wdt) ==="
lsmod | grep -i wdt
echo
# 3. 检查是否有 watchdog 守护进程服务
echo "=== 检查 watchdog.service 状态 ==="
systemctl status watchdog &>/tmp/watchdog.status
if grep -q "Loaded: not-found" /tmp/watchdog.status; then
echo "未找到 watchdog.service"
else
cat /tmp/watchdog.status
fi
echo
# 4. 检查是否存在 watchdog 配置文件
echo "=== 检查 /etc/watchdog.conf 文件 ==="
if [ -f /etc/watchdog.conf ]; then
echo "/etc/watchdog.conf 存在"
cat /etc/watchdog.conf | grep -v "^#" | grep -v "^$"
else
echo "/etc/watchdog.conf 不存在"
fi
echo
# 5. 检查 yum-cron 自动更新设置
echo "=== 检查 yum-cron 是否启用自动重启 ==="
if systemctl is-enabled yum-cron &>/dev/null; then
echo "yum-cron 已启用"
if grep -q "apply_updates = yes" /etc/yum/yum-cron.conf && \
grep -q "system_reboot = yes" /etc/yum/yum-cron.conf; then
echo "⚠️ 注意:yum-cron 配置为自动更新并重启!"
else
echo "yum-cron 当前不会自动重启"
fi
else
echo "yum-cron 未启用"
fi
echo
# 6. 检查 cron.hourly 脚本内容
echo "=== 检查 /etc/cron.hourly/ 中的脚本 ==="
if [ "$(ls -A /etc/cron.hourly/ 2>/dev/null)" ]; then
for script in /etc/cron.hourly/*; do
echo "--- $script ---"
cat "$script"
echo
done
else
echo "/etc/cron.hourly/ 目录为空或不存在"
fi
echo
# 7. 检查内核 panic 设置
echo "=== 检查 kernel.panic 设置 ==="
sysctl kernel.panic
echo
# 8. 检查 journald 是否启用持久化日志
echo "=== 检查 journald 日志持久化状态 ==="
if [ -d /var/log/journal ]; then
echo "✅ journald 持久化日志已启用"
else
echo "❌ journald 持久化日志未启用,请运行:"
echo "mkdir -p /var/log/journal && systemd-tmpfiles --create --prefix /var/log/journal && systemctl restart systemd-journald"
fi
echo
# 9. 检查 kdump 是否启用
echo "=== 检查 kdump 是否启用 ==="
if systemctl is-active --quiet kdump; then
echo "✅ kdump 已启用"
else
echo "❌ kdump 未启用,请运行:"
echo "dnf install -y kexec-tools && systemctl enable kdump && systemctl start kdump"
fi
echo
# 结束提示
echo "✅ 排查结束。请检查输出中的 ⚠️ 标记项,并重点关注 cron.hourly 脚本和 yum-cron 设置。"