From f704f049001a3eedbcfb06bd493f92549fd29f9c Mon Sep 17 00:00:00 2001 From: jingrow Date: Fri, 8 Aug 2025 05:55:46 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A1=AE=E4=BF=9Dpm2=E6=88=90=E5=8A=9F?= =?UTF-8?q?=E5=90=AF=E5=8A=A8=E9=A1=B9=E7=9B=AE=E5=90=8E=E6=89=8D=E7=BB=A7?= =?UTF-8?q?=E7=BB=AD=E4=B8=8B=E4=B8=80=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- install_jsite.sh | 83 ++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 73 insertions(+), 10 deletions(-) diff --git a/install_jsite.sh b/install_jsite.sh index 0a2fd66..4b55099 100755 --- a/install_jsite.sh +++ b/install_jsite.sh @@ -763,6 +763,17 @@ start_project_with_pm2() { fi else log_warning "项目已在PM2中运行,跳过启动" + # 即使跳过启动,也要检查现有进程是否正常运行 + PM2_RUNNING=$(su - jingrow -c " + export NVM_DIR=\"\$HOME/.nvm\" + [ -s \"\$NVM_DIR/nvm.sh\" ] && \. \"\$NVM_DIR/nvm.sh\" + pm2 list | grep -w '$SITE_NAME' | grep -c 'online' || echo '0' + ") + if [ "$PM2_RUNNING" = "0" ]; then + log_error "现有PM2进程未正常运行,需要重新启动" + return 1 + fi + log_success "现有PM2进程运行正常" return 0 fi else @@ -785,18 +796,30 @@ start_project_with_pm2() { fi fi - # 等待一下让PM2启动完成 - sleep 5 + # 等待PM2启动完成,最多等待30秒 + log_info "等待PM2启动完成..." + local wait_time=0 + local max_wait=30 + local pm2_running="0" + + while [ $wait_time -lt $max_wait ] && [ "$pm2_running" = "0" ]; do + sleep 2 + wait_time=$((wait_time + 2)) + + pm2_running=$(su - jingrow -c " + export NVM_DIR=\"\$HOME/.nvm\" + [ -s \"\$NVM_DIR/nvm.sh\" ] && \. \"\$NVM_DIR/nvm.sh\" + pm2 list | grep -w '$SITE_NAME' | grep -c 'online' || echo '0' + ") + + if [ "$pm2_running" = "0" ]; then + log_info "等待PM2启动... (${wait_time}s/${max_wait}s)" + fi + done # 检查PM2进程是否真的启动了 - PM2_RUNNING=$(su - jingrow -c " - export NVM_DIR=\"\$HOME/.nvm\" - [ -s \"\$NVM_DIR/nvm.sh\" ] && \. \"\$NVM_DIR/nvm.sh\" - pm2 list | grep -w '$SITE_NAME' | grep -c 'online' || echo '0' - ") - - if [ "$PM2_RUNNING" = "0" ]; then - log_error "PM2启动失败,项目未正常运行" + if [ "$pm2_running" = "0" ]; then + log_error "PM2启动失败,项目未正常运行(等待${wait_time}秒后仍未能启动)" log_info "检查PM2状态:" su - jingrow -c " export NVM_DIR=\"\$HOME/.nvm\" @@ -812,6 +835,46 @@ start_project_with_pm2() { return 1 fi + # 额外检查:验证项目是否真的在监听端口 + local project_port=$(get_or_assign_port "$SITE_NAME") + log_info "验证项目是否在端口 $project_port 上正常运行..." + + # 等待一下让应用完全启动 + sleep 3 + + # 检查端口是否被监听 + local port_check=0 + local max_port_checks=10 + local port_check_count=0 + + while [ $port_check_count -lt $max_port_checks ] && [ $port_check -eq 0 ]; do + port_check=$(netstat -tlnp 2>/dev/null | grep ":$project_port " | wc -l || echo "0") + if [ $port_check -eq 0 ]; then + sleep 1 + port_check_count=$((port_check_count + 1)) + log_info "等待端口 $project_port 启动... (${port_check_count}/${max_port_checks})" + fi + done + + if [ $port_check -eq 0 ]; then + log_error "项目启动失败:端口 $project_port 未被监听" + log_info "检查PM2状态:" + su - jingrow -c " + export NVM_DIR=\"\$HOME/.nvm\" + [ -s \"\$NVM_DIR/nvm.sh\" ] && \. \"\$NVM_DIR/nvm.sh\" + pm2 list + " + log_info "检查PM2日志:" + su - jingrow -c " + export NVM_DIR=\"\$HOME/.nvm\" + [ -s \"\$NVM_DIR/nvm.sh\" ] && \. \"\$NVM_DIR/nvm.sh\" + pm2 logs $SITE_NAME --lines 20 + " + return 1 + fi + + log_success "项目已成功启动并监听端口 $project_port" + # 保存PM2配置 su - jingrow -c " export NVM_DIR=\"\$HOME/.nvm\"