a-cloud-all/.devops/pm2install.sh

107 lines
2.9 KiB
Bash
Executable File

#!/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 ""