#!/bin/bash # 服务端自动拉取并重启服务脚本 # 使用方法:将此脚本设置为 cron 任务或手动执行 set -e # 配置项 PROJECT_DIR="/path/to/your/xhs_cloud_stable_v2" # 修改为实际的服务器路径 GIT_REPO="your-git-repo-url" # 修改为实际的 Git 仓库地址 LOG_FILE="$PROJECT_DIR/logs/auto_pull.log" # 创建日志目录 mkdir -p "$(dirname "$LOG_FILE")" # 日志函数 log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE" } log "========== 开始检查更新 ==========" cd "$PROJECT_DIR" || { log "错误:无法进入项目目录 $PROJECT_DIR" exit 1 } # 检查是否为 Git 仓库 if [ ! -d ".git" ]; then log "警告:当前目录不是 Git 仓库,尝试克隆..." git clone "$GIT_REPO" "$PROJECT_DIR" || { log "错误:Git 克隆失败" exit 1 } fi # 获取当前分支名 CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD) log "当前分支:$CURRENT_BRANCH" # 拉取最新代码 log "执行 git fetch..." git fetch origin # 检查是否有新提交 LOCAL=$(git rev-parse HEAD) REMOTE=$(git rev-parse origin/"$CURRENT_BRANCH") if [ "$LOCAL" != "$REMOTE" ]; then log "发现新更新,开始拉取..." # 拉取代码 git pull origin "$CURRENT_BRANCH" || { log "错误:Git pull 失败" exit 1 } log "代码更新成功!" # 检查是否有 requirements.txt 变化 if git diff HEAD@{1} HEAD --name-only | grep -q "requirements.txt"; then log "检测到 requirements.txt 变化,更新依赖..." pip install -r requirements.txt >> "$LOG_FILE" 2>&1 || { log "警告:依赖安装失败,请手动检查" } fi # 重启服务(根据实际部署方式调整) log "重启服务..." # 方式1:使用 docker-compose if [ -f "docker-compose.yml" ]; then docker-compose down docker-compose up -d log "Docker 服务已重启" fi # 方式2:使用 systemd 服务 # systemctl restart xhs-crawler # log "Systemd 服务已重启" # 方式3:使用 supervisor # supervisorctl restart xhs-crawler # log "Supervisor 服务已重启" log "========== 更新完成 ==========" else log "没有新更新,无需操作" fi log "========== 检查结束 ==========" echo ""