deploy.sh 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. #!/bin/bash
  2. set -e # 出错时终止脚本
  3. # 配置信息
  4. APP_DIR="/root/AutoScraperX"
  5. LOG_FILE="/var/log/autoscraperx_deploy.log"
  6. VENV_DIR="${APP_DIR}/venv"
  7. PYTHON="python"
  8. REQUIREMENTS="${APP_DIR}/requirements.txt"
  9. # 日志函数
  10. log() {
  11. local msg="[$(date '+%Y-%m-%d %H:%M:%S')] $1"
  12. echo "$msg"
  13. echo "$msg" >> "$LOG_FILE"
  14. }
  15. # 错误处理函数
  16. handle_error() {
  17. log "部署失败: $1"
  18. exit 1
  19. }
  20. # 确保目录存在
  21. ensure_dir() {
  22. if [ ! -d "$1" ]; then
  23. log "创建目录: $1"
  24. mkdir -p "$1" || handle_error "无法创建目录 $1"
  25. fi
  26. }
  27. # 主函数
  28. main() {
  29. log "===== 开始部署 AutoScraperX ====="
  30. # 检查目录
  31. ensure_dir "$APP_DIR"
  32. cd "$APP_DIR" || handle_error "应用目录不存在"
  33. # 拉取最新代码(如果是Git仓库)
  34. log "拉取最新代码..."
  35. if [ -d ".git" ]; then
  36. git pull origin master || handle_error "Git拉取失败"
  37. else
  38. log "警告: 当前目录不是Git仓库,跳过拉取"
  39. fi
  40. # 创建或更新虚拟环境
  41. log "检查虚拟环境..."
  42. if [ ! -d "$VENV_DIR" ]; then
  43. log "创建新的虚拟环境..."
  44. python3 -m venv "$VENV_DIR" || handle_error "创建虚拟环境失败"
  45. fi
  46. # 安装依赖
  47. log "安装Python依赖..."
  48. "$PYTHON" -m pip install --upgrade pip || handle_error "更新pip失败"
  49. "$PYTHON" -m pip install -r "$REQUIREMENTS" || handle_error "安装依赖失败"
  50. # 停止现有服务
  51. log "停止现有服务..."
  52. pkill -f "$PYTHON main.py" || true # 忽略"无进程可杀"的错误
  53. # 启动服务(使用nohup后台运行)
  54. log "启动新服务..."
  55. nohup "$PYTHON" main.py > /dev/null 2>&1 &
  56. sleep 2 # 等待2秒,确保服务启动
  57. # 检查服务状态
  58. if pgrep -f "$PYTHON main.py" > /dev/null; then
  59. log "服务已成功启动!"
  60. else
  61. handle_error "服务启动失败!"
  62. fi
  63. log "===== 部署完成 ====="
  64. }
  65. # 执行主函数
  66. main