From 24d9b000cd4ca37f99cc902e3c783d8bbf3c5523 Mon Sep 17 00:00:00 2001 From: jingrow Date: Fri, 8 Aug 2025 06:26:03 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=9C=A8=E6=96=B0=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=E5=99=A8=E4=B8=8A=E7=AC=AC=E4=B8=80=E6=AC=A1=E6=89=A7?= =?UTF-8?q?=E8=A1=8C=E8=84=9A=E6=9C=AC=E6=97=B6pm2=E6=97=A0=E6=B3=95?= =?UTF-8?q?=E6=88=90=E5=8A=9F=E5=90=AF=E5=8A=A8=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- install_jsite.sh | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/install_jsite.sh b/install_jsite.sh index 980ece6..bedee8a 100755 --- a/install_jsite.sh +++ b/install_jsite.sh @@ -309,6 +309,24 @@ install_nodejs() { install_pm2() { log_info "开始安装PM2..." + # 确保NVM环境变量被正确配置到用户配置文件中 + log_info "配置NVM环境变量..." + + # 检查 ~/.bashrc 中是否已有NVM配置 + if ! su - jingrow -c "grep -q 'NVM_DIR' ~/.bashrc 2>/dev/null"; then + log_info "在 ~/.bashrc 中添加NVM配置..." + su - jingrow -c "echo 'export NVM_DIR=\"\$HOME/.nvm\"' >> ~/.bashrc" + su - jingrow -c "echo '[ -s \"\$NVM_DIR/nvm.sh\" ] && \. \"\$NVM_DIR/nvm.sh\"' >> ~/.bashrc" + su - jingrow -c "echo '[ -s \"\$NVM_DIR/bash_completion\" ] && \. \"\$NVM_DIR/bash_completion\"' >> ~/.bashrc" + fi + + # 检查 ~/.profile 中是否已有NVM配置(用于非交互式shell) + if ! su - jingrow -c "grep -q 'NVM_DIR' ~/.profile 2>/dev/null"; then + log_info "在 ~/.profile 中添加NVM配置..." + su - jingrow -c "echo 'export NVM_DIR=\"\$HOME/.nvm\"' >> ~/.profile" + su - jingrow -c "echo '[ -s \"\$NVM_DIR/nvm.sh\" ] && \. \"\$NVM_DIR/nvm.sh\"' >> ~/.profile" + fi + # 检查PM2是否已安装 PM2_VERSION=$(su - jingrow -c 'export NVM_DIR="$HOME/.nvm" && [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && pm2 -v 2>/dev/null || echo "not_installed"') @@ -321,6 +339,10 @@ install_pm2() { [ -s \"\$NVM_DIR/nvm.sh\" ] && \. \"\$NVM_DIR/nvm.sh\" npm install -g pm2 " + if [ $? -ne 0 ]; then + log_error "PM2安装失败" + return 1 + fi log_success "PM2安装完成" fi @@ -734,8 +756,12 @@ start_project_with_pm2() { return 1 fi + # 确保NVM环境变量被正确加载 + log_info "加载NVM环境变量..." + # 检查项目是否已经在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 @@ -745,6 +771,7 @@ 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 @@ -755,6 +782,7 @@ 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 @@ -765,6 +793,7 @@ 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' @@ -779,6 +808,7 @@ 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 @@ -788,6 +818,7 @@ 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 @@ -807,6 +838,7 @@ 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' @@ -822,12 +854,14 @@ 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 @@ -860,12 +894,14 @@ 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 @@ -877,6 +913,7 @@ 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 @@ -885,6 +922,7 @@ 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