优化 upgrade.sh 脚本,重构重启检查逻辑并改进输出格式
This commit is contained in:
45
debian/upgrade.sh
vendored
45
debian/upgrade.sh
vendored
@ -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
|
Reference in New Issue
Block a user