#!/bin/bash # PM2 安装和配置脚本 set -e SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" echo "==========================================" echo "PM2 安装和配置脚本" echo "==========================================" # 1. 配置 npm 镜像源 echo "" echo "[步骤 1/7] 配置 npm 镜像源..." npm config set registry https://registry.npmmirror.com echo "✓ npm 镜像源已配置为: https://registry.npmmirror.com" # 2. 检查并安装 pm2 echo "" echo "[步骤 2/7] 检查 pm2 是否已安装..." if ! command -v pm2 &> /dev/null; then echo "pm2 未安装,开始安装..." npm install -g pm2 echo "✓ pm2 安装成功" else echo "✓ pm2 已安装" pm2 --version fi # 3. 检查并删除旧的 devops-monitor 进程 echo "" echo "[步骤 3/7] 检查是否存在旧的 devops-monitor 进程..." if pm2 list | grep -q "devops-monitor"; then echo "发现旧的 devops-monitor 进程,删除中..." pm2 delete devops-monitor echo "✓ 旧进程已删除" else echo "✓ 未发现旧进程" fi # 4. 启动 devops-monitor 进程 echo "" echo "[步骤 4/7] 启动 devops-monitor 进程..." cd "$SCRIPT_DIR" pm2 start monitor.py --name devops-monitor --interpreter python3 echo "✓ devops-monitor 进程已启动" # 5. 查看进程列表 echo "" echo "[步骤 5/7] 查看 PM2 进程列表..." pm2 list # 6. 配置开机自启动 echo "" echo "[步骤 6/7] 配置开机自启动..." echo "注意: 此步骤可能需要输入密码" echo "" # 执行 pm2 startup 并捕获输出 STARTUP_OUTPUT=$(pm2 startup 2>&1) echo "$STARTUP_OUTPUT" # 检查是否需要执行 sudo 命令 if echo "$STARTUP_OUTPUT" | grep -q "sudo env"; then echo "" echo "检测到需要执行 sudo 命令来配置开机自启动" echo "请复制上面的 sudo 命令并手动执行,或者按 Ctrl+C 跳过此步骤" echo "" # 提取 sudo 命令 SUDO_CMD=$(echo "$STARTUP_OUTPUT" | grep "sudo env" | tail -1) if [ -n "$SUDO_CMD" ]; then echo "是否现在执行此命令? (y/n)" read -r response if [[ "$response" =~ ^[Yy]$ ]]; then eval "$SUDO_CMD" echo "✓ 开机自启动配置完成" else echo "⚠ 跳过开机自启动配置" echo "如需配置,请手动执行以下命令:" echo "$SUDO_CMD" fi fi else echo "✓ 开机自启动配置完成" fi # 7. 保存 PM2 配置 echo "" echo "[步骤 7/7] 保存 PM2 配置..." pm2 save echo "✓ PM2 配置已保存" echo "" echo "==========================================" echo "PM2 安装和配置完成!" echo "==========================================" echo "" echo "常用命令:" echo " pm2 list - 查看进程列表" echo " pm2 logs devops-monitor - 查看日志" echo " pm2 restart devops-monitor - 重启进程" echo " pm2 stop devops-monitor - 停止进程" echo " pm2 delete devops-monitor - 删除进程" echo ""