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

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

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