From 23535452808232e9dae508e6a096b37b11540c4f Mon Sep 17 00:00:00 2001 From: jingrow Date: Fri, 8 Aug 2025 06:52:47 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96pm2=E7=9A=84=E5=AE=89?= =?UTF-8?q?=E8=A3=85=E5=92=8C=E5=90=AF=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- install_jsite.sh | 51 ++++++++++++++++++++++++++---------------------- 1 file changed, 28 insertions(+), 23 deletions(-) diff --git a/install_jsite.sh b/install_jsite.sh index bedee8a..4af73a5 100755 --- a/install_jsite.sh +++ b/install_jsite.sh @@ -81,6 +81,16 @@ get_optimal_host_ip() { echo "$host_ip" } +# PM2命令执行函数(统一处理环境变量) +execute_pm2_command() { + local command="$1" + su - jingrow -c " + export NVM_DIR=\"\$HOME/.nvm\" + [ -s \"\$NVM_DIR/nvm.sh\" ] && \. \"\$NVM_DIR/nvm.sh\" + $command + " 2>/dev/null +} + # 解析命令行参数 while [[ $# -gt 0 ]]; do case $1 in @@ -761,7 +771,6 @@ start_project_with_pm2() { # 检查项目是否已经在PM2中运行 PM2_STATUS=$(su - jingrow -c " - source ~/.bashrc 2>/dev/null || true export NVM_DIR=\"\$HOME/.nvm\" [ -s \"\$NVM_DIR/nvm.sh\" ] && \. \"\$NVM_DIR/nvm.sh\" pm2 list | grep -w '$SITE_NAME' | wc -l @@ -771,7 +780,6 @@ start_project_with_pm2() { if [ "$FORCE_UPDATE" = true ]; then log_warning "项目已在PM2中运行,重新启动..." su - jingrow -c " - source ~/.bashrc 2>/dev/null || true export NVM_DIR=\"\$HOME/.nvm\" [ -s \"\$NVM_DIR/nvm.sh\" ] && \. \"\$NVM_DIR/nvm.sh\" cd /home/jingrow/jsite/$SITE_NAME @@ -782,7 +790,6 @@ start_project_with_pm2() { log_error "PM2启动失败,请检查项目配置和依赖" log_info "检查PM2日志:" su - jingrow -c " - source ~/.bashrc 2>/dev/null || true export NVM_DIR=\"\$HOME/.nvm\" [ -s \"\$NVM_DIR/nvm.sh\" ] && \. \"\$NVM_DIR/nvm.sh\" pm2 logs $SITE_NAME --lines 10 @@ -793,7 +800,6 @@ start_project_with_pm2() { log_warning "项目已在PM2中运行,跳过启动" # 即使跳过启动,也要检查现有进程是否正常运行 PM2_RUNNING=$(su - jingrow -c " - source ~/.bashrc 2>/dev/null || true 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' @@ -808,7 +814,6 @@ start_project_with_pm2() { else log_info "启动新项目..." su - jingrow -c " - source ~/.bashrc 2>/dev/null || true export NVM_DIR=\"\$HOME/.nvm\" [ -s \"\$NVM_DIR/nvm.sh\" ] && \. \"\$NVM_DIR/nvm.sh\" cd /home/jingrow/jsite/$SITE_NAME @@ -818,7 +823,6 @@ start_project_with_pm2() { log_error "PM2启动失败,请检查项目配置和依赖" log_info "检查PM2日志:" su - jingrow -c " - source ~/.bashrc 2>/dev/null || true export NVM_DIR=\"\$HOME/.nvm\" [ -s \"\$NVM_DIR/nvm.sh\" ] && \. \"\$NVM_DIR/nvm.sh\" pm2 logs $SITE_NAME --lines 10 @@ -827,10 +831,10 @@ start_project_with_pm2() { fi fi - # 等待PM2启动完成,最多等待30秒 + # 等待PM2启动完成,最多等待60秒 log_info "等待PM2启动完成..." local wait_time=0 - local max_wait=30 + local max_wait=60 local pm2_running="0" while [ $wait_time -lt $max_wait ] && [ "$pm2_running" = "0" ]; do @@ -838,7 +842,6 @@ start_project_with_pm2() { wait_time=$((wait_time + 2)) pm2_running=$(su - jingrow -c " - source ~/.bashrc 2>/dev/null || true 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' @@ -854,14 +857,12 @@ start_project_with_pm2() { log_error "PM2启动失败,项目未正常运行(等待${wait_time}秒后仍未能启动)" log_info "检查PM2状态:" su - jingrow -c " - source ~/.bashrc 2>/dev/null || true export NVM_DIR=\"\$HOME/.nvm\" [ -s \"\$NVM_DIR/nvm.sh\" ] && \. \"\$NVM_DIR/nvm.sh\" pm2 list " log_info "检查PM2日志:" su - jingrow -c " - source ~/.bashrc 2>/dev/null || true export NVM_DIR=\"\$HOME/.nvm\" [ -s \"\$NVM_DIR/nvm.sh\" ] && \. \"\$NVM_DIR/nvm.sh\" pm2 logs $SITE_NAME --lines 20 @@ -894,14 +895,12 @@ start_project_with_pm2() { log_error "项目启动失败:端口 $project_port 未被监听" log_info "检查PM2状态:" su - jingrow -c " - source ~/.bashrc 2>/dev/null || true export NVM_DIR=\"\$HOME/.nvm\" [ -s \"\$NVM_DIR/nvm.sh\" ] && \. \"\$NVM_DIR/nvm.sh\" pm2 list " log_info "检查PM2日志:" su - jingrow -c " - source ~/.bashrc 2>/dev/null || true export NVM_DIR=\"\$HOME/.nvm\" [ -s \"\$NVM_DIR/nvm.sh\" ] && \. \"\$NVM_DIR/nvm.sh\" pm2 logs $SITE_NAME --lines 20 @@ -913,7 +912,6 @@ start_project_with_pm2() { # 保存PM2配置 su - jingrow -c " - source ~/.bashrc 2>/dev/null || true export NVM_DIR=\"\$HOME/.nvm\" [ -s \"\$NVM_DIR/nvm.sh\" ] && \. \"\$NVM_DIR/nvm.sh\" pm2 save @@ -922,7 +920,6 @@ start_project_with_pm2() { # 显示PM2状态 log_info "PM2项目状态:" su - jingrow -c " - source ~/.bashrc 2>/dev/null || true export NVM_DIR=\"\$HOME/.nvm\" [ -s \"\$NVM_DIR/nvm.sh\" ] && \. \"\$NVM_DIR/nvm.sh\" pm2 list @@ -1227,12 +1224,12 @@ show_deployment_info() { fi log_info "PM2管理命令:" - echo " - 查看状态: pm2 list" - echo " - 查看日志: pm2 logs $SITE_NAME" - echo " - 重启项目: pm2 restart $SITE_NAME" - echo " - 停止项目: pm2 stop $SITE_NAME" - echo " - 删除项目: pm2 delete $SITE_NAME" - echo " - 监控界面: pm2 monit" + echo " - 查看状态: su - jingrow -c 'export NVM_DIR=\"\$HOME/.nvm\" && [ -s \"\$NVM_DIR/nvm.sh\" ] && \. \"\$NVM_DIR/nvm.sh\" && pm2 list'" + echo " - 查看日志: su - jingrow -c 'export NVM_DIR=\"\$HOME/.nvm\" && [ -s \"\$NVM_DIR/nvm.sh\" ] && \. \"\$NVM_DIR/nvm.sh\" && pm2 logs $SITE_NAME'" + echo " - 重启项目: su - jingrow -c 'export NVM_DIR=\"\$HOME/.nvm\" && [ -s \"\$NVM_DIR/nvm.sh\" ] && \. \"\$NVM_DIR/nvm.sh\" && pm2 restart $SITE_NAME'" + echo " - 停止项目: su - jingrow -c 'export NVM_DIR=\"\$HOME/.nvm\" && [ -s \"\$NVM_DIR/nvm.sh\" ] && \. \"\$NVM_DIR/nvm.sh\" && pm2 stop $SITE_NAME'" + echo " - 删除项目: su - jingrow -c 'export NVM_DIR=\"\$HOME/.nvm\" && [ -s \"\$NVM_DIR/nvm.sh\" ] && \. \"\$NVM_DIR/nvm.sh\" && pm2 delete $SITE_NAME'" + echo " - 监控界面: su - jingrow -c 'export NVM_DIR=\"\$HOME/.nvm\" && [ -s \"\$NVM_DIR/nvm.sh\" ] && \. \"\$NVM_DIR/nvm.sh\" && pm2 monit'" log_info "Traefik配置信息:" echo " - 网站配置文件: /home/jingrow/traefik-docker/conf.d/website/$SITE_NAME.yml" @@ -1242,10 +1239,18 @@ show_deployment_info() { # 显示当前端口分配情况 show_port_assignments + # 显示PM2状态 + log_info "当前PM2状态:" + su - jingrow -c " + export NVM_DIR=\"\$HOME/.nvm\" + [ -s \"\$NVM_DIR/nvm.sh\" ] && \. \"\$NVM_DIR/nvm.sh\" + pm2 list + " 2>/dev/null || log_warning "无法获取PM2状态,请手动执行: su - jingrow -c 'export NVM_DIR=\"\$HOME/.nvm\" && [ -s \"\$NVM_DIR/nvm.sh\" ] && \. \"\$NVM_DIR/nvm.sh\" && pm2 list'" + log_info "下一步操作:" echo " 1. 进入项目目录: cd /home/jingrow/jsite/$SITE_NAME" - echo " 2. 查看PM2状态: pm2 list" - echo " 3. 查看项目日志: pm2 logs $SITE_NAME" + echo " 2. 查看PM2状态: su - jingrow -c 'export NVM_DIR=\"\$HOME/.nvm\" && [ -s \"\$NVM_DIR/nvm.sh\" ] && \. \"\$NVM_DIR/nvm.sh\" && pm2 list'" + echo " 3. 查看项目日志: su - jingrow -c 'export NVM_DIR=\"\$HOME/.nvm\" && [ -s \"\$NVM_DIR/nvm.sh\" ] && \. \"\$NVM_DIR/nvm.sh\" && pm2 logs $SITE_NAME'" echo " 4. 访问Traefik管理界面: http://localhost:8080" echo " 5. 访问项目: $SITE_URL" echo " 6. 检查traefik配置: cat /home/jingrow/traefik-docker/conf.d/website/$SITE_NAME.yml"