服务器自动化部署脚本

avatar
作者
猴君
阅读量:0

在服务器上解压和更新项目包的自动化部署脚本

在现代软件开发中,自动化部署成为了提升工作效率的重要手段。今天,我们将讨论一段用于在服务器上解压项目包并更新服务的脚本。这段脚本封装了一系列操作,旨在简化部署过程,减少人为错误的发生。

脚本概述

脚本的功能主要包括:

  1. 下载指定的压缩包文件。
  2. 解压缩文件到指定目录。
  3. 复制相关文件至目标服务路径。
  4. 关闭正在运行的服务进程。
  5. 启动新的服务进程。

接下来,我们逐步解析脚本的每一个部分。

脚本代码

#!/bin/sh   #压缩包文件名   fileName=dn-planning20240827V1.zip    #拉取上传文件   wget -P /tmp http://文件服务器IP:端口/file_back/rest/ftpFileController/down/${fileName}    #系统服务路径   projectPath=/home/appuser/run/dn-server    echo "复制"${fileName}   mv /tmp/${fileName} /home/appuser/backup    echo "解压压缩包"${fileName}   unzip -O GBK -o /home/appuser/backup/${fileName} -d /home/appuser/backup    cp -R /home/appuser/backup/dn-planning/template/* /${dataPath}/template   echo "复制jar包到"${dataPath}"路径下"   cp /home/appuser/backup/dn-planning/dn-planning.jar /${dataPath}    echo "关闭服务进程"   # 根据端口号杀死进程   netstat -nlp | grep :8081 | grep -v grep | awk '{print $7}' | awk -F '/' '{print $1}' | xargs kill -9    echo "更新项目"   nohup java -Xms4096m -Xmx12288m -jar -Dserver.port=8081 -Dspring.profiles.active=dev ${projectPath}/dn-planning.jar 2>&1 &   

脚本详细解析

  1. 文件名定义

    fileName=dn-planning.zip   

    这行定义了要下载和解压缩的压缩包文件名。

  2. 下载压缩包:(事先需把要发布的项目压缩包上传到文件服务器指定目录下)

    wget -P /tmp http://文件服务器IP:端口/file_back/rest/ftpFileController/down/${fileName}   

    使用wget命令从指定的URL下载文件,并将其存储在/tmp目录下。

  3. 定义服务路径

    projectPath=/home/appuser/run/dn-server   

    指定了服务的运行路径,以便后续文件操作使用。

  4. 移动文件到备份目录

    mv /tmp/${fileName} /home/appuser/backup   

    将下载的文件移动到备份目录以进行解压缩。

  5. 解压缩文件

    unzip -O GBK -o /home/appuser/backup/${fileName} -d /home/appuser/backup   

    使用unzip解压缩文件,并将内容存储在备份目录中。-O GBK选项确保了中文文件名的正确显示。

  6. 复制模板文件

    cp -R /home/appuser/backup/dn-planning/template/* /${projectPath}/template   

    从解压的文件中复制模板文件到服务的模板目录。

  7. 复制JAR包

    cp /home/appuser/backup/dn-planning/dn-planning.jar /${projectPath}   

    将JAR包复制到服务运行目录,准备启动服务。

  8. 杀死旧服务进程

    netstat -nlp | grep :8081 | grep -v grep | awk '{print $7}' | awk -F '/' '{print $1}' | xargs kill -9   

    通过查找占用8081端口的进程,并使用kill -9命令强制终止,以避免冲突。

    PS: 这段脚本的作用是查找并强制杀掉正在使用8081端口的进程。下面是对这段命令的详细分解:

    1. netstat -nlp: 这个命令用于显示网络连接状态。选项说明:

      • -n: 以数字格式显示地址和端口号。
      • -l: 只显示在监听状态的服务。
      • -p: 显示该连接对应的进程ID(PID)和程序名称。
    2. grep :8081: 从netstat的输出中筛选出使用8081端口的行。

    3. grep -v grep: 排除掉包含“grep”这个词的行,避免匹配到当前的grep命令本身。

    4. awk '{print $7}': 从筛选出的结果中提取第7列,通常这一列包含相应进程的PID和程序名称。

    5. awk -F '/' '{print $1}': 以斜杠(/)为分隔符,从中提取出PID部分。

    6. xargs kill -9: 将提取到的PID作为参数传给kill -9命令,强制终止这些进程。-9代表强制杀死进程,无论其状态如何。

    总结:
    这段脚本的最终效果是:找到所有当前占用8081端口的进程,并将其强制终止。请谨慎使用此命令,确保不会不小心终止重要的进程。

  9. 启动新服务进程

    nohup java -Xms4096m -Xmx12288m -jar -Dserver.port=8081 -Dspring.profiles.active=dev /${projectPath}/dn-planning.jar 2>&1 &   

    使用nohup命令在后台启动Java服务,并指定JVM参数以及运行的JAR包。

结论

这段脚本通过简单而有效的步骤,实现了在服务器上自动化解压和部署项目包的过程。自动化部署不仅提高了工作效率,也减少了人为错误的风险。在今后的开发过程中,可以根据项目需求对脚本进行扩展和优化,以适应不同的部署场景。

希望这篇博客能为你的自动化部署提供一些灵感和帮助!如有任何问题或想法,欢迎在评论区分享。

    广告一刻

    为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!