92 lines
2.3 KiB
Bash
92 lines
2.3 KiB
Bash
#!/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 ""
|