You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
#!/bin/bash
#===============================================================================# 宝塔面板更新预准备脚本# 功能:在面板更新时,提前准备,避免面板更新失败# 说明:接收两个参数:1.更新的面板版本号 2.更新的版本是否为稳定版 3.执行时机(prepare, after)# prepare: 在下载面板文件之前就运行的内容# after: 在替换文件之后,运行重启之前执行的内容# 支持:CentOS/RHEL、Ubuntu、Debian系统#===============================================================================
UPDATE_VERSION="" # 版本号, 形如: 11.2.3UPDATE_VER_MAJOR="" # 主版本号 -> 11UPDATE_VER_MINOR="" # 次版本号 -> 2UPDATE_VER_MICRO="" # 小版本号 -> 3IS_STABLE=false # 默认不是稳定版而是正式版本OPPORTUNITY="prepare"
PANEL_PATH="/www/server/panel"
# 输出成功信息, 必须输出 "BT-Panel Update Ready" 才证明预处理成功function success() { local message=$1 if [ -n "$message" ]; then echo "$message" fi echo "BT-Panel Update Ready"}
# 获取当前版本号function get_now_version() { local common_file="$PANEL_PATH/class/common.py" if [ ! -f "$common_file" ]; then echo "" # 文件不存在时返回空字符串 return 1 fi # 形如:g.version = '11.2.0' local version_str=$(grep -E '^\s+g.version\s*=\s*.*$' "$PANEL_PATH/class/common.py" | cut -d "=" -f2 ) # 形如:'11.2.0' local version=$(echo "$version_str" | sed -n "s/.*['\"]\(.*\)['\"].*/\1/p" ) echo "$version" return 0}
# 解析参数function parse_arguments() { if [ -z "$1" ]; then echo "Error: 请指定接下来的更新版本号" exit 1 fi if echo "$1" | grep -qE '^[0-9]+\.[0-9]+\.[0-9]+$'; then : else echo "Error: 请指定正确的版本号" exit 1 fi UPDATE_VERSION=$1 UPDATE_VER_MAJOR=$(echo $UPDATE_VERSION | cut -d. -f1) UPDATE_VER_MINOR=$(echo $UPDATE_VERSION | cut -d. -f2) UPDATE_VER_MICRO=$(echo $UPDATE_VERSION | cut -d. -f3) case "$2" in 1|True|true) # 稳定版 IS_STABLE=true ;; 0|False|false) # 非稳定版 IS_STABLE=false ;; *) IS_STABLE=false ;; esac case "$3" in prepare) OPPORTUNITY="prepare" ;; after) OPPORTUNITY="after" ;; *) OPPORTUNITY="prepare" ;; esac}
# 默认处理,什么都不做function nothing_do() { local version=$1 # 输出成功信息 success "已完成[BT-Panel-$version]处理"}
function replace_bt_command() { local init_path="${PANEL_PATH}/init.sh" if [ -f "$init_path" ]; then \cp -a "$init_path" /etc/init.d/bt chmod +x /etc/init.d/bt else echo "Error: $init_path 文件不存在" exit 1 fi}
function prepare_main() { echo "开始处理预更新..." local now_version=$(get_now_version) if [ $? -eq 0 ]; then echo "当前版本:$now_version, 目标版本:$UPDATE_VERSION" else echo "获取当前版本失败" exit 1 fi
case "$UPDATE_VER_MAJOR.$UPDATE_VER_MINOR.$UPDATE_VER_MICRO" in 11.3.*) nothing_do $UPDATE_VERSION ;; * ) nothing_do $UPDATE_VERSION ;; esac}
function after_main() { echo "启动预检测..." case "$UPDATE_VER_MAJOR.$UPDATE_VER_MINOR.$UPDATE_VER_MICRO" in 11.3.*) replace_bt_command success "已完成[BT-Panel-$UPDATE_VERSION]启动检查处理" ;; * ) nothing_do $UPDATE_VERSION ;; esac}
# 主函数function main() { if [ "$OPPORTUNITY" = "prepare" ]; then prepare_main elif [ "$OPPORTUNITY" = "after" ]; then after_main fi}
# 主函数入口if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then parse_arguments $@ mainfi
|