deploy.sh 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. #!/bin/bash
  2. # 设置远程服务器信息
  3. REMOTE_USER="root" # 远程服务器用户名,根据你的实际情况修改
  4. REMOTE_HOST="129.204.227.215" # 远程服务器地址
  5. REMOTE_BASE_DIR="/home/software/sljx" # 远程服务器上的部署目录,根据你的目录结构修改
  6. # 本地 JAR 包路径 -- 根据你提供的目录结构修改
  7. LOCAL_FS_ADMIN_JAR="./fs-admin/target/fs-admin.jar" # 假设target目录和你提供的 tree 命令显示的目录同级
  8. LOCAL_FS_COMPANY_JAR="./fs-company/target/fs-company.jar"
  9. LOCAL_FS_USER_APP_JAR="./fs-user-app/target/fs-user-app.jar"
  10. LOCAL_FS_API_JAR="./fs-api/target/fs-api.jar"
  11. # 函数:检查本地文件是否存在
  12. check_local_file() {
  13. if [ ! -f "$1" ]; then
  14. echo "Error: Local file $1 not found."
  15. exit 1
  16. fi
  17. }
  18. # 检查本地 JAR 文件是否存在
  19. check_local_file "$LOCAL_FS_ADMIN_JAR"
  20. check_local_file "$LOCAL_FS_COMPANY_JAR"
  21. check_local_file "$LOCAL_FS_USER_APP_JAR"
  22. # 停止远程服务器上可能正在运行的旧版本(假设进程名与 JAR 包名相同)
  23. stop_remote_app() {
  24. local app_name=$1
  25. local remote_dir=$2
  26. local full_path="$REMOTE_BASE_DIR/$remote_dir/$app_name.jar"
  27. echo "Stopping $app_name in $remote_dir..."
  28. # 使用单引号确保命令在远程服务器上正确执行
  29. ssh "$REMOTE_USER@$REMOTE_HOST" '
  30. full_path="'"$REMOTE_BASE_DIR/$remote_dir/$app_name.jar"'"
  31. pids=$(ps aux | grep "java -jar.*'"$full_path"'" | grep -v grep | awk "{print \$2}")
  32. if [ -n "$pids" ]; then
  33. echo "Found process IDs: $pids for '"$app_name"'"
  34. for pid in $pids; do
  35. echo "Stopping process $pid..."
  36. kill -15 $pid
  37. done
  38. # 等待进程结束
  39. sleep 3
  40. # 检查进程是否仍在运行,如果是则强制终止
  41. for pid in $pids; do
  42. if ps -p $pid > /dev/null 2>&1; then
  43. echo "Process $pid still running, force killing..."
  44. kill -9 $pid
  45. fi
  46. done
  47. echo "All processes stopped."
  48. else
  49. echo "No running process found for '"$app_name"' in '"$remote_dir"'"
  50. fi
  51. '
  52. }
  53. # 部署单个 JAR 包
  54. deploy_jar() {
  55. local local_jar=$1
  56. local remote_dir=$2
  57. local app_name=$(basename "$local_jar" .jar)
  58. # 创建远程目录(如果不存在)
  59. ssh "$REMOTE_USER@$REMOTE_HOST" "mkdir -p $REMOTE_BASE_DIR/$remote_dir"
  60. # 停止旧版本
  61. stop_remote_app $app_name $remote_dir
  62. # 上传 JAR 包
  63. scp "$local_jar" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_BASE_DIR/$remote_dir/"
  64. # 在后台启动 JAR 包, 并将输出重定向到 /dev/null
  65. ssh "$REMOTE_USER@$REMOTE_HOST" "nohup java -jar -Dfile.encoding=UTF-8 $REMOTE_BASE_DIR/$remote_dir/$app_name.jar > $REMOTE_BASE_DIR/$remote_dir/$app_name.log 2>&1 &"
  66. echo "Deployed $app_name to $REMOTE_HOST:$REMOTE_BASE_DIR/$remote_dir"
  67. }
  68. # 主要部署流程
  69. # 部署 fs-admin
  70. deploy_jar "$LOCAL_FS_ADMIN_JAR" "fs-admin"
  71. #deploy_jar "$LOCAL_FS_API_JAR" "fs-api"
  72. # 部署 fs-company
  73. #deploy_jar "$LOCAL_FS_COMPANY_JAR" "fs-company"
  74. # 部署 fs-user-app
  75. #deploy_jar "$LOCAL_FS_USER_APP_JAR" "fs-user-app"
  76. echo "Deployment completed."