优化pm2的安装和启动

This commit is contained in:
jingrow 2025-08-08 06:52:47 +08:00
parent 24d9b000cd
commit 2353545280

View File

@ -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"