当前位置:论坛首页 > Linux面板 > 讨论

【已解答】宝塔面板定制docker升级镜像后一键修复运行环境

发表在 Linux面板3 天前 [复制链接] 1 57

之前一直在群晖Docker使用宝塔,主要是省掉额外搭建服务器,一般用来测试测试网站什么的还挺好的,但是问题是,每次升级宝塔之后都会出现应用和配置文件丢失,于是,需要将官方的文件目录映射代码从
  1. -v ~/website_data:/www/wwwroot -v ~/mysql_data:/www/server/data -v ~/vhost:/www/server/panel/vhost
复制代码

改成
  1. - v ./www:/www
复制代码
也就是将整个www目录做持久化,因为宝塔的一些配置文件、备份文件、日志文件全都是在www目录下的。
这样修改后,升级宝塔之后,配置文件都还在,安装的插件也都在,但是均无法运行,看了一下是因为init的启动脚本和配置脚本在etc目录下,升级宝塔后丢失,于是我让AI写了段代码,可以完美解决这个问题。

代码如下(代码由GeminiPro优化)

  1. #!/bin/bash
  2. # ===========================================================================
  3. # 宝塔 Docker 面板环境深度修复脚本 V34.0 (V21基准 + MySQL 终极修复)
  4. # ===========================================================================
  5. # 严正声明:
  6. # 本脚本以用户提供的 V21 版本为不可变基准。
  7. # 1. [保持] Nginx/Apache/PHP/Redis/基础依赖 逻辑与 V21 完全一致,绝无修改。
  8. # 2. [修复] 仅针对 "第四阶段:MySQL" 进行替换,集成 my.cnf 模板修复与 ibdata1 尺寸自适应。
  9. # ===========================================================================

  10. # 设置环境变量,确保命令可用
  11. export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
  12. export DEBIAN_FRONTEND=noninteractive

  13. # --- 1. 配置区域 (依赖包下载地址) ---
  14. # 使用 Ubuntu 官方源
  15. URL_JEMALLOC="http://archive.ubuntu.com/ubuntu/pool/universe/j/jemalloc/libjemalloc2_5.2.1-1ubuntu1_amd64.deb"
  16. URL_LUAJIT="http://archive.ubuntu.com/ubuntu/pool/universe/l/luajit/libluajit-5.1-2_2.1.0~beta3+dfsg-5.1_amd64.deb"
  17. URL_SSL="http://nz2.archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2_amd64.deb"
  18. URL_ICU="http://security.ubuntu.com/ubuntu/pool/main/i/icu/libicu60_60.2-3ubuntu3.2_amd64.deb"

  19. # --- 2. 颜色与日志定义 ---
  20. GREEN='\033[0;32m'
  21. RED='\033[0;31m'
  22. YELLOW='\033[1;33m'
  23. CYAN='\033[0;36m'
  24. GREY='\033[0;37m'
  25. NC='\033[0m' # No Color

  26. log_info() { echo -e "${CYAN}[运行] $1${NC}"; }
  27. log_success() { echo -e "${GREEN}[成功] $1${NC}"; }
  28. log_fail() { echo -e "${RED}[错误] $1${NC}"; }
  29. log_skip() { echo -e "${GREY}[跳过] $1${NC}"; }
  30. log_step() { echo -e "${YELLOW} -> $1${NC}"; }
  31. log_line() { echo -e "--------------------------------------------------------"; }

  32. # --- 3. 核心工具函数 ---

  33. # 下载并安装 .deb 包
  34. install_deb() {
  35.     local url="$1"
  36.     local filename="$2"
  37.     log_step "正在下载: $(basename "$filename")..."
  38.     if wget --timeout=15 --tries=3 -O "$filename" "$url" >/dev/null 2>&1; then
  39.         log_step "下载完成,正在通过 dpkg 安装..."
  40.         dpkg -i "$filename" >/dev/null 2>&1
  41.         rm -f "$filename"
  42.         return 0
  43.     else
  44.         log_fail "下载失败: $url (请检查网络或更换源)"
  45.         return 1
  46.     fi
  47. }

  48. # --- 脚本开始 ---

  49. clear
  50. echo -e "========================================================"
  51. echo -e "   宝塔 Docker 服务全自动修复脚本 V34.0 (基准修正版)   "
  52. echo -e "========================================================"

  53. # 检查是否为 Debian/Ubuntu 系统
  54. if [ ! -f "/usr/bin/apt-get" ]; then
  55.     log_fail "检测到非 Debian/Ubuntu 系统,本脚本仅支持 apt 包管理!"
  56.     exit 1
  57. fi

  58. # ---------------------------------------------------------------------------
  59. # 第一阶段:基础用户与环境重建 (V21 原版)
  60. # ---------------------------------------------------------------------------
  61. log_line
  62. log_info "1. 检查并重建系统用户 (User/Group)"

  63. if [ ! -f "/usr/bin/wget" ]; then
  64.     log_step "未检测到 wget,正在安装..."
  65.     apt-get update -y >/dev/null 2>&1
  66.     apt-get install -y wget >/dev/null 2>&1
  67. fi

  68. # 补充 Apache 可能需要的通用库 (libexpat, libnghttp2)
  69. log_step "检查基础运行库..."
  70. if ! dpkg -s libexpat1 >/dev/null 2>&1; then
  71.     apt-get install -y libexpat1 libnghttp2-14 >/dev/null 2>&1
  72. fi

  73. for user in www mysql redis; do
  74.     if ! id -u $user >/dev/null 2>&1; then
  75.         log_step "用户 [$user] 不存在,正在创建..."
  76.         groupadd $user >/dev/null 2>&1
  77.         useradd -g $user -s /sbin/nologin $user >/dev/null 2>&1
  78.         log_success "用户 [$user] 创建成功"
  79.     else
  80.         log_skip "用户 [$user] 已存在"
  81.     fi
  82. done

  83. # ---------------------------------------------------------------------------
  84. # 第二阶段:核心依赖库修复 (V21 原版)
  85. # ---------------------------------------------------------------------------
  86. log_line
  87. log_info "2. 检查系统核心依赖库 (.so files)"

  88. # >>> 修复 Jemalloc <<<
  89. if [ -f "/usr/lib/libjemalloc.so.2" ]; then
  90.     log_skip "依赖 libjemalloc.so.2 已存在"
  91. else
  92.     log_step "依赖 libjemalloc 缺失,准备安装..."
  93.     if install_deb "$URL_JEMALLOC" "/tmp/libjemalloc2.deb"; then
  94.         rm -f /usr/lib/libjemalloc.so.2 /usr/lib64/libjemalloc.so.2
  95.         real_jemalloc=$(find /usr -name "libjemalloc.so.2" | grep -v "/usr/lib/libjemalloc.so.2" | head -n 1)
  96.         if [ -n "$real_jemalloc" ]; then
  97.             ln -sf "$real_jemalloc" /usr/lib/libjemalloc.so.2
  98.             ln -sf "$real_jemalloc" /usr/lib64/libjemalloc.so.2
  99.             log_success "libjemalloc 修复完成"
  100.         fi
  101.     fi
  102. fi

  103. # >>> 修复 LuaJIT <<<
  104. if [ -f "/usr/lib/libluajit-5.1.so.2" ]; then
  105.      log_skip "依赖 libluajit-5.1.so.2 已存在"
  106. else
  107.     log_step "依赖 libluajit-5.1 缺失,准备安装..."
  108.     if install_deb "$URL_LUAJIT" "/tmp/libluajit.deb"; then
  109.         rm -f /usr/lib/libluajit-5.1.so.2 /usr/lib64/libluajit-5.1.so.2
  110.         real_luajit=$(find /usr -name "libluajit-5.1.so.2" | grep -v "/usr/lib/libluajit-5.1.so.2" | head -n 1)
  111.         if [ -n "$real_luajit" ]; then
  112.             ln -sf "$real_luajit" /usr/lib/libluajit-5.1.so.2
  113.             ln -sf "$real_luajit" /usr/lib64/libluajit-5.1.so.2
  114.             ln -sf "$real_luajit" /usr/lib/x86_64-linux-gnu/libluajit-5.1.so.2 2>/dev/null
  115.             log_success "libluajit 修复完成"
  116.         fi
  117.     fi
  118. fi

  119. # >>> 修复 OpenSSL 1.1 / ICU <<<
  120. if [ ! -f "/usr/lib/x86_64-linux-gnu/libssl.so.1.1" ]; then
  121.     install_deb "$URL_SSL" "/tmp/libssl1.1.deb"
  122. fi
  123. if [ ! -f "/usr/lib/x86_64-linux-gnu/libicuio.so.60" ]; then
  124.     install_deb "$URL_ICU" "/tmp/libicu60.deb"
  125. fi

  126. ldconfig >/dev/null 2>&1

  127. # ---------------------------------------------------------------------------
  128. # 第三阶段:PHP 服务修复 (V21 原版)
  129. # ---------------------------------------------------------------------------
  130. log_line
  131. log_info "3. 检查 PHP 服务状态"

  132. if [ ! -d "/www/server/php" ]; then
  133.     log_skip "未检测到 PHP 安装目录"
  134. else
  135.     for php_dir in /www/server/php/*; do
  136.         if [ -d "$php_dir" ]; then
  137.             version=$(basename "$php_dir")
  138.             if [[ ! $version =~ ^[0-9]+$ ]]; then continue; fi
  139.             
  140.             if pgrep -f "$php_dir/" >/dev/null; then
  141.                 log_success "PHP-$version 正在运行中 (跳过)"
  142.                 continue
  143.             fi

  144.             log_step "正在启动 PHP-$version..."
  145.             init_script="/etc/init.d/php-fpm-$version"
  146.             src_script="$php_dir/src/sapi/fpm/init.d.php-fpm"
  147.             
  148.             if [ ! -f "$init_script" ]; then
  149.                 if [ -f "$src_script" ]; then
  150.                     cp "$src_script" "$init_script"
  151.                 else
  152.                     cat > "$init_script" <<EOF
  153. #!/bin/bash
  154. PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
  155. export PATH
  156. mkdir -p $php_dir/var/run/
  157. case "\$1" in
  158.     start) $php_dir/sbin/php-fpm --fpm-config $php_dir/etc/php-fpm.conf ;;
  159.     stop) pkill -F $php_dir/var/run/php-fpm.pid ;;
  160.     reload) pkill -USR2 -F $php_dir/var/run/php-fpm.pid ;;
  161. esac
  162. EOF
  163.                 fi
  164.                 chmod +x "$init_script"
  165.             fi
  166.             
  167.             service "php-fpm-$version" start >/dev/null 2>&1
  168.             if pgrep -f "$php_dir/" >/dev/null; then log_success "PHP-$version 启动成功"; else log_fail "PHP-$version 启动失败"; fi
  169.         fi
  170.     done
  171. fi

  172. # ---------------------------------------------------------------------------
  173. # 第四阶段:MySQL 服务修复 (唯一修改部分:使用 V32 验证成功的逻辑)
  174. # ---------------------------------------------------------------------------
  175. log_line
  176. log_info "4. 检查 MySQL 服务状态 (深度修复)"

  177. MYSQL_BIN="/www/server/mysql/bin/mysql"
  178. MY_CNF="/etc/my.cnf"

  179. if [ ! -f "$MYSQL_BIN" ]; then
  180.     log_skip "未检测到 MySQL 安装文件"
  181. else
  182.     # 1. 确定数据目录
  183.     DATA_DIR="/www/server/data"
  184.     if [ ! -d "$DATA_DIR" ] && [ -d "/www/server/mysql/data" ]; then
  185.         DATA_DIR="/www/server/mysql/data"
  186.     fi
  187.     log_step "锁定 MySQL 数据目录: $DATA_DIR"

  188.     # 2. 配置文件重建 (使用用户提供的可用模板)
  189.     if [ -f "$MY_CNF" ]; then
  190.         cp "$MY_CNF" "${MY_CNF}.bak_v34"
  191.         log_step "已备份旧配置到 ${MY_CNF}.bak_v34"
  192.     fi

  193.     log_step "正在写入标准配置 (修复日志文件大小匹配问题)..."
  194.     cat > "$MY_CNF" <<EOF
  195. [client]
  196. #password        = your_password
  197. port                = 3306
  198. socket                = /tmp/mysql.sock

  199. [mysqld]
  200. port                = 3306
  201. socket                = /tmp/mysql.sock
  202. datadir     = $DATA_DIR
  203. default_storage_engine = InnoDB
  204. skip-external-locking
  205. key_buffer_size = 256M
  206. max_allowed_packet = 100G
  207. table_open_cache = 1024
  208. sort_buffer_size = 4M
  209. net_buffer_length = 4K
  210. read_buffer_size = 4M
  211. read_rnd_buffer_size = 256K
  212. myisam_sort_buffer_size = 64M
  213. thread_cache_size = 128
  214. tmp_table_size = 128M
  215. lower_case_table_names = 1
  216. default_authentication_plugin = mysql_native_password
  217. sql-mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

  218. explicit_defaults_for_timestamp = true
  219. #skip-name-resolve
  220. max_connections = 500
  221. max_connect_errors = 100
  222. open_files_limit = 65535

  223. log-bin=mysql-bin
  224. binlog_format=mixed
  225. server-id = 1
  226. binlog_expire_logs_seconds = 600000
  227. slow_query_log=1
  228. slow-query-log-file=$DATA_DIR/mysql-slow.log
  229. long_query_time=3
  230. #log_queries_not_using_indexes=on
  231. early-plugin-load = ""
  232. log-error = $DATA_DIR/mysql-error.log

  233. innodb_data_home_dir = $DATA_DIR
  234. innodb_data_file_path = ibdata1:10M:autoextend
  235. innodb_log_group_home_dir = $DATA_DIR
  236. innodb_buffer_pool_size = 1024M
  237. innodb_log_file_size = 512M
  238. innodb_log_buffer_size = 128M
  239. innodb_flush_log_at_trx_commit = 1
  240. innodb_lock_wait_timeout = 50
  241. innodb_max_dirty_pages_pct = 90
  242. innodb_read_io_threads = 4
  243. innodb_write_io_threads = 4

  244. [mysqldump]
  245. quick
  246. max_allowed_packet = 500M

  247. [mysql]
  248. no-auto-rehash

  249. [myisamchk]
  250. key_buffer_size = 256M
  251. sort_buffer_size = 4M
  252. read_buffer = 2M
  253. write_buffer = 2M

  254. [mysqlhotcopy]
  255. interactive-timeout
  256. EOF
  257.     log_success "配置文件 /etc/my.cnf 重建完成"

  258.     # 3. 解决 ibdata1 大小不匹配问题
  259.     IBDATA_FILE="$DATA_DIR/ibdata1"
  260.     if [ -f "$IBDATA_FILE" ]; then
  261.         FILE_SIZE_BYTE=$(ls -l "$IBDATA_FILE" | awk '{print $5}')
  262.         FILE_SIZE_MB=$((FILE_SIZE_BYTE / 1024 / 1024))
  263.         
  264.         # 如果不是 10M,修正它
  265.         if [ "$FILE_SIZE_MB" -ne 10 ]; then
  266.              log_step "检测到 ibdata1 为 ${FILE_SIZE_MB}M,修正配置..."
  267.              sed -i "s|ibdata1:10M:autoextend|ibdata1:${FILE_SIZE_MB}M:autoextend|g" "$MY_CNF"
  268.         fi
  269.     fi

  270.     # 4. 修正权限
  271.     log_step "修正 MySQL 目录权限..."
  272.     chown root:root "$MY_CNF"
  273.     chmod 644 "$MY_CNF"
  274.     chown -R mysql:mysql /www/server/mysql
  275.     chown -R mysql:mysql "$DATA_DIR"
  276.     chmod 755 "$DATA_DIR"
  277.     mkdir -p /var/run/mysqld && chown mysql:mysql /var/run/mysqld

  278.     # 5. 恢复启动脚本
  279.     if [ -f "/www/server/mysql/support-files/mysql.server" ]; then
  280.         cp /www/server/mysql/support-files/mysql.server /etc/init.d/mysqld
  281.         chmod +x /etc/init.d/mysqld
  282.     fi

  283.     # 6. 重启流程
  284.     log_step "正在重启 MySQL..."
  285.     service mysqld stop >/dev/null 2>&1
  286.    
  287.     for k in {1..5}; do
  288.          if ! pgrep -x "mysqld" >/dev/null; then break; fi
  289.          sleep 1
  290.     done
  291.    
  292.     if pgrep -x "mysqld" >/dev/null; then
  293.         pkill -9 mysqld >/dev/null 2>&1
  294.         rm -f "$DATA_DIR/mysql.pid"
  295.     fi
  296.     # 清理残留锁
  297.     rm -f "$DATA_DIR"/*.lock /tmp/mysql.sock /tmp/mysql.sock.lock

  298.     service mysqld start >/dev/null 2>&1
  299.    
  300.     for i in {1..10}; do
  301.         if pgrep -x "mysqld" >/dev/null; then break; fi; sleep 1;
  302.     done
  303.    
  304.     if pgrep -x "mysqld" >/dev/null; then
  305.         log_success "MySQL 启动成功"
  306.     else
  307.         log_fail "MySQL 启动失败,尝试救砖模式..."
  308.         sudo -u mysql /www/server/mysql/bin/mysqld_safe --defaults-file="$MY_CNF" >/dev/null 2>&1 &
  309.         sleep 5
  310.         if pgrep -x "mysqld" >/dev/null; then
  311.             log_success "MySQL (救砖模式) 启动成功"
  312.         else
  313.             log_fail "MySQL 救砖失败,请检查日志: $DATA_DIR/mysql-error.log"
  314.             tail -n 10 "$DATA_DIR/mysql-error.log" 2>/dev/null
  315.         fi
  316.     fi
  317. fi

  318. # ---------------------------------------------------------------------------
  319. # 第五阶段:Redis 服务修复 (V21 原版)
  320. # ---------------------------------------------------------------------------
  321. log_line
  322. log_info "5. 检查 Redis 服务状态"

  323. if [ ! -d "/www/server/redis" ]; then
  324.     log_skip "未检测到 Redis 安装目录"
  325. else
  326.     if [ -f "/www/server/redis/scripts/redis_init_script" ]; then
  327.         cp /www/server/redis/scripts/redis_init_script /etc/init.d/redis
  328.         chmod +x /etc/init.d/redis
  329.     fi
  330.    
  331.     log_step "修正 Redis 目录权限..."
  332.     chown -R redis:redis /www/server/redis
  333.    
  334.     log_step "正在关闭旧的 Redis 进程..."
  335.     service redis stop >/dev/null 2>&1
  336.     pkill redis-server >/dev/null 2>&1
  337.    
  338.     # --- 关键:循环等待直到进程完全消失 ---
  339.     for k in {1..10}; do
  340.         if ! pgrep -x "redis-server" >/dev/null; then break; fi
  341.         echo -n "."
  342.         sleep 1
  343.     done
  344.     echo ""

  345.     if pgrep -x "redis-server" >/dev/null; then
  346.          log_step "Redis 进程卡死,执行强制清理..."
  347.          pkill -9 redis-server >/dev/null 2>&1
  348.          rm -f /var/run/redis_6379.pid
  349.     fi
  350.    
  351.     log_step "尝试启动 Redis..."
  352.     service redis start >/dev/null 2>&1
  353.     sleep 2
  354.    
  355.     if pgrep -x "redis-server" >/dev/null; then
  356.         log_success "Redis 重启成功"
  357.     else
  358.         log_step "Service 启动失败,尝试通过配置文件直接启动..."
  359.         pkill -9 redis-server >/dev/null 2>&1
  360.         sudo -u redis /www/server/redis/src/redis-server /www/server/redis/redis.conf &
  361.         sleep 2
  362.         if pgrep -x "redis-server" >/dev/null; then
  363.             log_success "Redis (直接模式) 启动成功"
  364.         else
  365.             log_fail "Redis 启动失败,请检查配置文件权限"
  366.         fi
  367.     fi
  368. fi

  369. # ---------------------------------------------------------------------------
  370. # 第六阶段:Nginx 服务修复 (V21 原版)
  371. # ---------------------------------------------------------------------------
  372. log_line
  373. log_info "6. 检查 Nginx 服务状态"

  374. if [ ! -d "/www/server/nginx" ]; then
  375.     log_skip "未检测到 Nginx 安装目录"
  376. else
  377.     if [ ! -f "/etc/init.d/nginx" ]; then
  378.         cat > /etc/init.d/nginx << 'EOF'
  379. #!/bin/bash
  380. # chkconfig: 2345 55 25
  381. PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
  382. program=/www/server/nginx/sbin/nginx
  383. config=/www/server/nginx/conf/nginx.conf
  384. case "$1" in
  385.     start) $program -c $config ;;
  386.     stop) $program -c $config -s stop ;;
  387.     reload) $program -c $config -s reload ;;
  388. esac
  389. EOF
  390.         chmod +x /etc/init.d/nginx
  391.     fi

  392.     if [ -d "/www/wwwlogs" ]; then chown -R www:www /www/wwwlogs; fi

  393.     log_step "正在重启 Nginx..."
  394.     service nginx stop >/dev/null 2>&1
  395.     pkill nginx >/dev/null 2>&1
  396.     sleep 1
  397.     service nginx start >/dev/null 2>&1
  398.     sleep 1

  399.     if pgrep -x "nginx" >/dev/null; then log_success "Nginx 重启成功"; else log_fail "Nginx 启动失败"; fi
  400. fi

  401. # ---------------------------------------------------------------------------
  402. # 第七阶段:Apache (httpd) 服务修复 (V21 原版)
  403. # ---------------------------------------------------------------------------
  404. log_line
  405. log_info "7. 检查 Apache 服务状态"

  406. if [ ! -d "/www/server/apache" ]; then
  407.     log_skip "未检测到 Apache 安装目录"
  408. else
  409.     # 1. 恢复启动脚本 (Apachectl)
  410.     # 宝塔通常将 apachectl 放在 bin 下,需要链接到 init.d
  411.     if [ ! -f "/etc/init.d/httpd" ]; then
  412.         log_step "重建 Apache 启动脚本..."
  413.         if [ -f "/www/server/apache/bin/apachectl" ]; then
  414.             cp /www/server/apache/bin/apachectl /etc/init.d/httpd
  415.             chmod +x /etc/init.d/httpd
  416.             # 替换脚本中的路径(防止旧配置路径不对)
  417.             sed -i 's|/www/server/apache|/www/server/apache|g' /etc/init.d/httpd
  418.         else
  419.             log_fail "Apache bin 目录下未找到 apachectl,无法恢复启动脚本"
  420.         fi
  421.     fi

  422.     # 2. 关键权限修复
  423.     # Apache 对日志目录权限极其敏感,如果不可写会直接启动失败且无回显
  424.     log_step "修正 Apache 及日志目录权限..."
  425.     chown -R www:www /www/server/apache
  426.     if [ -d "/www/wwwlogs" ]; then
  427.         chown -R www:www /www/wwwlogs
  428.         chmod 755 /www/wwwlogs
  429.     fi

  430.     # 3. 稳健重启逻辑 (参考 Redis)
  431.     log_step "正在关闭旧的 Apache 进程..."
  432.     service httpd stop >/dev/null 2>&1
  433.     pkill httpd >/dev/null 2>&1
  434.    
  435.     # 等待进程退出
  436.     for k in {1..10}; do
  437.         if ! pgrep -x "httpd" >/dev/null; then break; fi
  438.         echo -n "."
  439.         sleep 1
  440.     done
  441.     echo ""

  442.     if pgrep -x "httpd" >/dev/null; then
  443.          log_step "Apache 进程卡死,强制清理..."
  444.          pkill -9 httpd >/dev/null 2>&1
  445.          rm -f /www/server/apache/logs/httpd.pid
  446.     fi

  447.     # 4. 启动
  448.     log_step "尝试启动 Apache..."
  449.     service httpd start >/dev/null 2>&1
  450.     sleep 2

  451.     # 5. 验证
  452.     if pgrep -x "httpd" >/dev/null; then
  453.         log_success "Apache 重启成功"
  454.     else
  455.         log_fail "Apache 启动失败"
  456.         log_step "尝试手动获取错误信息:"
  457.         /www/server/apache/bin/httpd -k start
  458.     fi
  459. fi

  460. # ---------------------------------------------------------------------------
  461. # 结束
  462. # ---------------------------------------------------------------------------
  463. log_line
  464. echo -e "${GREEN}修复脚本运行结束。${NC}"
  465. echo -e "如果服务仍有问题,请复制上方红色错误信息进行排查。"
  466. echo -e "========================================================"
复制代码
使用时可以保存为sh,在宝塔的面板里面手动运行,也可以像我这样加入计划任务,定时运行,都是可以的。
QQ20260126-181909.png

实测可以修复升级宝塔后出现的ngnix、mysql、redis、php、apache运行错误的问题,而无需卸载重新安装。

PS:宝塔的计划任务触发条件没有开机或重启选项,如果有开机或重启选项,每次重启宝塔面板自动运行这一段代码,基本就完美了,希望官方能够跟进一下。

使用道具 举报 只看该作者 回复
发表于 昨天 10:59 | 显示全部楼层
您好,非常感谢您的反馈,已经将此帖发给对应的维护者,感谢您提供的脚本,奖励宝塔币100
使用道具 举报 回复 支持 反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

普通问题处理

论坛响应时间:72小时

问题处理方式:排队(仅解答)

工作时间:白班:9:00 - 18:00

紧急运维服务

响应时间:3分钟

问题处理方式:宝塔专家1对1服务

工作时间:工作日:9:00 - 18:30

宝塔专业团队为您解决服务器疑难问题

点击联系技术分析

工作时间:09:00至18:30

快速回复 返回顶部 返回列表