1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- #!/bin/bash
- set -e # 出错时终止脚本
- # 配置信息
- APP_DIR="/root/AutoScraperX"
- LOG_FILE="/var/log/autoscraperx_deploy.log"
- VENV_DIR="${APP_DIR}/venv"
- PYTHON="python"
- REQUIREMENTS="${APP_DIR}/requirements.txt"
- # 日志函数
- log() {
- local msg="[$(date '+%Y-%m-%d %H:%M:%S')] $1"
- echo "$msg"
- echo "$msg" >> "$LOG_FILE"
- }
- # 错误处理函数
- handle_error() {
- log "部署失败: $1"
- exit 1
- }
- # 确保目录存在
- ensure_dir() {
- if [ ! -d "$1" ]; then
- log "创建目录: $1"
- mkdir -p "$1" || handle_error "无法创建目录 $1"
- fi
- }
- # 主函数
- main() {
- log "===== 开始部署 AutoScraperX ====="
- # 检查目录
- ensure_dir "$APP_DIR"
- cd "$APP_DIR" || handle_error "应用目录不存在"
- # 拉取最新代码(如果是Git仓库)
- log "拉取最新代码..."
- if [ -d ".git" ]; then
- git pull origin master || handle_error "Git拉取失败"
- else
- log "警告: 当前目录不是Git仓库,跳过拉取"
- fi
- # 创建或更新虚拟环境
- log "检查虚拟环境..."
- if [ ! -d "$VENV_DIR" ]; then
- log "创建新的虚拟环境..."
- python3 -m venv "$VENV_DIR" || handle_error "创建虚拟环境失败"
- fi
- # 安装依赖
- log "安装Python依赖..."
- "$PYTHON" -m pip install --upgrade pip || handle_error "更新pip失败"
- "$PYTHON" -m pip install -r "$REQUIREMENTS" || handle_error "安装依赖失败"
- # 停止现有服务
- log "停止现有服务..."
- pkill -f "$PYTHON main.py" || true # 忽略"无进程可杀"的错误
- # 启动服务(使用nohup后台运行)
- log "启动新服务..."
- nohup "$PYTHON" main.py > /dev/null 2>&1 &
- sleep 2 # 等待2秒,确保服务启动
- # 检查服务状态
- if pgrep -f "$PYTHON main.py" > /dev/null; then
- log "服务已成功启动!"
- else
- handle_error "服务启动失败!"
- fi
- log "===== 部署完成 ====="
- }
- # 执行主函数
- main
|