Skip to content

Commit e381c21

Browse files
committed
Update.
1 parent ed3f23d commit e381c21

1 file changed

Lines changed: 93 additions & 2 deletions

File tree

Snell.sh

Lines changed: 93 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ export PATH
99
# WebSite: https://about.nange.cn
1010
#=================================================
1111

12-
sh_ver="1.7.2"
12+
sh_ver="1.7.3"
1313
snell_v4_version="4.1.1"
1414
snell_v5_version="5.0.0b2"
1515
script_dir=$(cd "$(dirname "$0")"; pwd)
@@ -143,6 +143,39 @@ checkStatus(){
143143
fi
144144
}
145145

146+
# 检查版本更新
147+
checkVersionUpdate(){
148+
if [[ -e ${snell_bin} && -e ${snell_conf} ]]; then
149+
current_ver=$(cat ${snell_conf}|grep 'version = '|awk -F 'version = ' '{print $NF}')
150+
151+
# 只检查 v5 版本的更新
152+
if [[ "$current_ver" == "5" ]]; then
153+
# 读取当前安装的版本号
154+
if [[ -e ${snell_version_file} ]]; then
155+
installed_version=$(cat ${snell_version_file} | sed 's/^v//')
156+
script_version=${snell_v5_version}
157+
158+
if [[ "$installed_version" != "$script_version" ]]; then
159+
echo -e "${Tip} 检测到 Snell v5 版本不一致:"
160+
echo -e " 当前安装版本: ${Yellow_font_prefix}v${installed_version}${Font_color_suffix}"
161+
echo -e " 脚本最新版本: ${Green_font_prefix}v${script_version}${Font_color_suffix}"
162+
echo -e "是否立即升级到最新版本?(Y/n)"
163+
read -e -p "(默认: y):" upgrade_confirm
164+
[[ -z "${upgrade_confirm}" ]] && upgrade_confirm="y"
165+
166+
if [[ ${upgrade_confirm} == [Nn] ]]; then
167+
echo -e "${Info} 已跳过版本升级"
168+
else
169+
echo -e "${Info} 开始升级 Snell v5 到最新版本..."
170+
upgradeSnellV5
171+
return 0
172+
fi
173+
fi
174+
fi
175+
fi
176+
fi
177+
}
178+
146179

147180
# 获取 Snell 下载链接
148181
getSnellDownloadUrl(){
@@ -169,7 +202,7 @@ downloadSnellV2() {
169202
rm -rf "snell-server-v2.0.6-linux-${arch}.zip"
170203
chmod +x snell-server
171204
mv -f snell-server "${snell_bin}"
172-
echo "v2.0.6" > "${snell_v4_version_file}"
205+
echo "v2.0.6" > "${snell_version_file}"
173206
echo -e "${Info} Snell Server v2 下载安装完毕!"
174207
return 0
175208
}
@@ -770,6 +803,61 @@ updateV4toV5(){
770803
startMenu
771804
}
772805

806+
# 升级 Snell v5 到最新版本
807+
upgradeSnellV5(){
808+
checkInstalledStatus
809+
readConfig
810+
811+
# 检查当前版本是否为 v5
812+
if [[ "$ver" != "5" ]]; then
813+
echo -e "${Error} 当前版本不是 v5,无法使用此功能!当前版本:v${ver}"
814+
return 1
815+
fi
816+
817+
echo -e "${Info} 开始升级 Snell v5 到最新版本..."
818+
819+
# 停止服务
820+
echo -e "${Info} 停止 Snell Server 服务..."
821+
systemctl stop snell-server
822+
823+
# 备份当前二进制文件
824+
if [[ -e "${snell_bin}" ]]; then
825+
echo -e "${Info} 备份当前程序文件..."
826+
cp "${snell_bin}" "${snell_bin}.v5.backup.$(date +%Y%m%d_%H%M%S)"
827+
fi
828+
829+
# 下载并安装最新 v5
830+
echo -e "${Info} 开始下载最新 v5 版本..."
831+
downloadSnell "${snell_v5_version}" "v5 Beta 最新版"
832+
833+
if [[ $? -eq 0 ]]; then
834+
# 重新加载 systemd 并启动服务
835+
echo -e "${Info} 重启 Snell Server 服务..."
836+
systemctl daemon-reload
837+
systemctl start snell-server
838+
839+
# 检查服务状态
840+
sleep 2
841+
checkStatus
842+
if [[ "$status" == "running" ]]; then
843+
echo -e "${Info} v5 升级成功!"
844+
echo -e "${Info} 当前版本:v${snell_v5_version} ${Yellow_font_prefix}Beta${Font_color_suffix}"
845+
else
846+
echo -e "${Error} 服务启动失败,正在回滚..."
847+
# 回滚到备份版本
848+
backup_file=$(ls -t "${snell_bin}".v5.backup.* 2>/dev/null | head -1)
849+
if [[ -n "$backup_file" && -e "$backup_file" ]]; then
850+
cp "$backup_file" "${snell_bin}"
851+
systemctl start snell-server
852+
echo -e "${Info} 已回滚到备份版本"
853+
fi
854+
fi
855+
else
856+
echo -e "${Error} v5 下载失败,启动原版本"
857+
systemctl start snell-server
858+
fi
859+
}
860+
773861
# 卸载 Snell
774862
uninstallSnell(){
775863
checkInstalledStatus
@@ -932,6 +1020,9 @@ startMenu(){
9321020
sysArch
9331021
action=$1
9341022

1023+
# 检查版本更新(在显示菜单前)
1024+
checkVersionUpdate
1025+
9351026
# 检查是否安装了 v4 版本
9361027
show_v4_to_v5_option=false
9371028
if [[ -e ${snell_bin} && -e ${snell_conf} ]]; then

0 commit comments

Comments
 (0)