提交 323a46a8 authored 作者: 陈泽健's avatar 陈泽健

feat(script): 增强问题处理脚本功能和用户体验

- 优化平台检测逻辑,将调试日志输出到stderr
- 更新日志文件路径,适配新旧平台目录结构
- 改进用户输入处理函数,支持空输入和错误提示
- 扩展主菜单选项至10项,新增导出日志、修复服务等功能
- 增强子菜单功能,支持更多更新选项和全选操作
- 调整脚本入口调用方式,提高代码可维护性
上级 5e33ba89
......@@ -128,14 +128,14 @@ show_operation_summary() {
detect_platform() {
# 检查是否存在新统一平台目录
if [ -d "/data/services/api" ]; then
log_debug "检测到新统一平台目录"
log_debug "检测到新统一平台目录" >&2
echo "new"
# 检查是否存在标准版平台目录
elif [ -d "/var/www/java" ]; then
log_debug "检测到标准版平台目录"
log_debug "检测到标准版平台目录" >&2
echo "standard"
else
log_debug "未检测到特定平台目录,返回unknown"
log_debug "未检测到特定平台目录,返回unknown" >&2
echo "unknown"
fi
}
......@@ -837,15 +837,15 @@ rotate_logs() {
if [ "$platform" = "new" ]; then
local log_files=(
"/data/services/api/java-meeting/java-meeting2.0/log.out"
"/data/services/api/java-meeting/java-meeting-extapi/log.out"
"/data/services/api/python-cmdb/uinfo.log"
"/data/services/api/python-cmdb/uwsgi.log"
"/data/services/api/java-meeting/java-meeting2.0/logs"
"/data/services/api/java-meeting/java-meeting-extapi/logs"
"/data/services/api/python-cmdb/log"
)
else
local log_files=(
"/var/www/java/api-java-meeting2.0/log.out"
"/var/www/java/external-meeting-api/log.out"
"/var/www/java/api-java-meeting2.0/logs"
"/var/www/java/external-meeting-api/logs"
"/var/www/html/log"
)
fi
......@@ -1984,23 +1984,33 @@ get_user_choice() {
local valid_choices="$2"
local choice=""
# 仅当提示包含“按回车”时允许空输入(用于子菜单的“全选”场景)
local allow_empty=0
if [[ "$prompt" == *"按回车"* ]]; then
allow_empty=1
fi
while true; do
echo -n "$prompt"
read choice
# 提示输出到 stderr,避免被命令替换捕获
printf "%s" "$prompt" >&2
IFS= read -r choice
# 如果没有输入并且允许空输入
if [ -z "$choice" ] && [[ "$valid_choices" == *","* ]]; then
echo "" # 返回空字符串表示全选
return
if [ -z "$choice" ]; then
if [ $allow_empty -eq 1 ]; then
echo ""
return
else
echo -e "${RED}无效的选择,请重新输入${NC}" >&2
continue
fi
fi
# 检查输入是否有效
# 使用更严格的验证方法,确保输入是一个独立的有效选项
# 检查输入是否为有效选项
if [[ ",$valid_choices," == *",$choice,"* ]]; then
echo "$choice"
return
else
echo -e "${RED}无效的选择,请重新输入${NC}"
echo -e "${RED}无效的选择,请重新输入${NC}" >&2
fi
done
}
......@@ -2111,6 +2121,30 @@ show_submenu() {
;;
esac
;;
5)
log_info "执行导出现场日志文件并压缩"
export_and_compress_logs "$platform"
;;
6)
log_info "执行修复对外后端服务异常掉线"
fix_external_service_disconnect "$platform"
;;
7)
log_info "执行修复ntp服务配置或启动问题"
fix_ntp_config
;;
8)
log_info "执行修复端口开放问题"
fix_port_access "$platform"
;;
9)
log_info "执行修复服务器DNS异常问题"
fix_dns_config "$platform"
;;
10)
log_info "执行打包备份现场环境数据"
backup_environment_data "$platform"
;;
*)
# 对于不需要子菜单的选项,直接执行
case $main_choice in
......@@ -2132,27 +2166,51 @@ interactive_mode() {
log_info "检测到平台类型: $platform"
local main_choice=$(get_user_choice "请选择操作 [1-4]: " "1,2,3,4")
# 显示主菜单
show_menu
local main_choice=$(get_user_choice "请选择操作 [1-10]: " "1,2,3,4,5,6,7,8,9,10")
log_info "用户选择操作: $main_choice"
case $main_choice in
1)
sub_choice=$(get_user_choice "请选择子操作 [1.1-1.3]: " "1.1,1.2,1.3")
sub_choice=$(get_user_choice "请选择子操作 [1.1-1.6, 或按回车全选]: " "1.1,1.2,1.3,1.4,1.5,1.6")
log_info "用户选择子操作: $sub_choice"
case $sub_choice in
1.1)
log_info "执行更新内部后端jar"
log_info "执行更新预定系统对内后端包"
update_inner_backend_jar "$platform"
;;
1.2)
log_info "执行更新外部后端jar"
log_info "执行更新预定系统对外后端包"
update_external_backend_jar "$platform"
;;
1.3)
log_info "执行更新前端"
log_info "执行更新预定系统前台包"
update_frontend "$platform"
;;
1.4)
log_info "执行更新预定系统后台包"
update_backend "$platform"
;;
1.5)
log_info "执行更新运维后端包"
update_ops_backend "$platform"
;;
1.6)
log_info "执行更新运维前端包"
update_ops_frontend "$platform"
;;
"")
log_info "执行更新所有包"
update_inner_backend_jar "$platform"
update_external_backend_jar "$platform"
update_frontend "$platform"
update_backend "$platform"
update_ops_backend "$platform"
update_ops_frontend "$platform"
;;
*)
log_error "无效的选择: $sub_choice"
;;
......@@ -2216,6 +2274,30 @@ interactive_mode() {
;;
esac
;;
5)
log_info "执行导出现场日志文件并压缩"
export_and_compress_logs "$platform"
;;
6)
log_info "执行修复对外后端服务异常掉线"
fix_external_service_disconnect "$platform"
;;
7)
log_info "执行修复ntp服务配置或启动问题"
fix_ntp_config
;;
8)
log_info "执行修复端口开放问题"
fix_port_access "$platform"
;;
9)
log_info "执行修复服务器DNS异常问题"
fix_dns_config "$platform"
;;
10)
log_info "执行打包备份现场环境数据"
backup_environment_data "$platform"
;;
*)
# 对于不需要子菜单的选项,直接执行
case $main_choice in
......@@ -2227,9 +2309,6 @@ interactive_mode() {
esac
}
# 脚本入口
main "$@"
# 脚本入口
main() {
if [ $# -gt 0 ]; then
......@@ -2273,3 +2352,5 @@ main() {
log_info "脚本执行完毕"
}
main "$@"
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论