fix: 优化宝塔面板Nginx重载逻辑,添加多种重启方式

- 添加BT Panel专用的Nginx重载流程
- 尝试多种方法:BT CLI工具、直接nginx命令、systemctl备用
- 改用进程检查(pgrep)验证Nginx状态,不依赖systemctl
- 修复BT Panel环境下nginx启动失败的问题
This commit is contained in:
WanWanYun
2025-11-13 09:39:47 +08:00
parent 0f53d0638c
commit c1b8e7b929

View File

@@ -2068,22 +2068,60 @@ EOF
# 启动或重载Nginx
if [[ "$IS_BT_PANEL" == "true" ]]; then
# 宝塔面板:使用reload而不是restart
if systemctl is-active --quiet nginx; then
systemctl reload nginx
print_info "已重载宝塔Nginx配置"
# 宝塔面板:尝试多种方式
print_info "宝塔环境尝试重载Nginx..."
# 方式1: 使用宝塔命令行工具(如果存在)
if [[ -f /etc/init.d/bt ]]; then
/etc/init.d/bt restart 2>/dev/null
fi
# 方式2: 直接使用nginx命令reload
if [[ -f /www/server/nginx/sbin/nginx ]]; then
/www/server/nginx/sbin/nginx -s reload 2>/dev/null
if [[ $? -eq 0 ]]; then
print_success "已使用nginx -s reload重载配置"
else
systemctl start nginx
print_info "已启动宝塔Nginx"
# 如果reload失败尝试启动
/www/server/nginx/sbin/nginx 2>/dev/null
if [[ $? -eq 0 ]]; then
print_success "已启动Nginx"
else
print_warning "Nginx reload失败尝试systemctl..."
fi
fi
fi
# 方式3: 尝试systemctl备用
if systemctl is-active --quiet nginx 2>/dev/null; then
systemctl reload nginx 2>/dev/null && print_info "已使用systemctl重载配置"
else
systemctl start nginx 2>/dev/null && print_info "已使用systemctl启动Nginx"
fi
else
# 标准Nginx重启
systemctl restart nginx
fi
# 验证Nginx是否运行
sleep 2
if [[ "$IS_BT_PANEL" == "true" ]]; then
# 宝塔:检查进程
if pgrep -x nginx > /dev/null; then
print_success "Nginx运行正常"
else
print_error "Nginx未运行"
print_warning "请在宝塔面板中手动启动Nginx或运行"
print_warning "/www/server/nginx/sbin/nginx"
return 1
fi
else
# 标准Nginx使用systemctl检查
if ! systemctl is-active --quiet nginx; then
print_error "Nginx启动失败"
return 1
fi
fi
print_success "基础HTTP Nginx配置完成"
echo ""