优化 upgrade.sh 脚本,重构重启检查逻辑并改进输出格式

This commit is contained in:
mini2024
2025-03-22 17:34:38 +08:00
parent 02b6d71215
commit 52397813ce

45
debian/upgrade.sh vendored
View File

@ -31,44 +31,39 @@ systemctl --failed
apt -qq install needrestart -y
############################################
# 设置变量标记是否需要重启
# 初始化变量
NEEDS_REBOOT=0
REASONS=""
# 方法1: 检查 reboot-required 文件
if [ -f /var/run/reboot-required ]; then
NEEDS_REBOOT=1
# 如果有详细信息文件,显示需要重启的包
if [ -f /var/run/reboot-required.pkgs ]; then
REASONS="需要重启的包:\n$(cat /var/run/reboot-required.pkgs)"
# 函数: 添加重启原因
add_reason() {
if [ -z "$REASONS" ]; then
REASONS="$1"
else
REASONS="系统标记为需要重启"
REASONS="$REASONS\n$1"
fi
fi
# 方法2: 检查正在运行的内核与已安装的最新内核是否不同
CURRENT_KERNEL=$(uname -r)
LATEST_KERNEL=$(dpkg -l 'linux-image-*' | grep ^ii | grep -v "${CURRENT_KERNEL}" | sort -V | tail -n 1 | awk '{print $2}' | sed 's/linux-image-//')
if [ ! -z "$LATEST_KERNEL" ] && [ "$LATEST_KERNEL" != "$CURRENT_KERNEL" ]; then
NEEDS_REBOOT=1
REASONS="${REASONS}\n已安装新内核: ${LATEST_KERNEL},当前运行内核: ${CURRENT_KERNEL}"
fi
}
# 方法3: 使用 needrestart 工具(如果已安装)
if command -v needrestart &> /dev/null; then
if needrestart -b | grep -q "NEEDRESTART-KSTA: 1"; then
NEEDS_REBOOT=1
REASONS="${REASONS}\nneedrestart 工具表明需要内核重启"
echo "检查系统重启状态..."
# 方法1: 检查 reboot-required 文件 (最可靠的方法)
if [ -f /var/run/reboot-required ]; then
add_reason "发现 /var/run/reboot-required 文件"
# 如果存在详细信息文件,显示需要重启的包
if [ -f /var/run/reboot-required.pkgs ]; then
add_reason "需要重启的包:\n$(cat /var/run/reboot-required.pkgs)"
fi
fi
# 输出结果
if [ $NEEDS_REBOOT -eq 1 ]; then
echo -e "系统需要重启\n原因:\n${REASONS}"
echo -e "\033[1;31m系统需要重启\033[0m"
echo -e "\033[1;33m原因:\033[0m"
echo -e "$REASONS"
exit 1
else
echo "系统不需要重启"
echo -e "\033[1;32m系统不需要重启\033[0m"
exit 0
fi