服务器自动化部署脚本
创始人
2024-09-25 03:23:12
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包。

结论

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

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

相关内容

热门资讯

一分钟内幕!科乐吉林麻将系统发... 一分钟内幕!科乐吉林麻将系统发牌规律,福建大玩家确实真的是有挂,技巧教程(有挂ai代打);所有人都在...
一分钟揭秘!微扑克辅助软件(透... 一分钟揭秘!微扑克辅助软件(透视辅助)确实是有挂(2024已更新)(哔哩哔哩);1、用户打开应用后不...
五分钟发现!广东雀神麻雀怎么赢... 五分钟发现!广东雀神麻雀怎么赢,朋朋棋牌都是是真的有挂,高科技教程(有挂方法)1、广东雀神麻雀怎么赢...
每日必看!人皇大厅吗(透明挂)... 每日必看!人皇大厅吗(透明挂)好像存在有挂(2026已更新)(哔哩哔哩);人皇大厅吗辅助器中分为三种...
重大科普!新华棋牌有挂吗(透视... 重大科普!新华棋牌有挂吗(透视)一直是有挂(2021已更新)(哔哩哔哩)1、完成新华棋牌有挂吗的残局...
二分钟内幕!微信小程序途游辅助... 二分钟内幕!微信小程序途游辅助器,掌中乐游戏中心其实存在有挂,微扑克教程(有挂规律)二分钟内幕!微信...
科技揭秘!jj斗地主系统控牌吗... 科技揭秘!jj斗地主系统控牌吗(透视)本来真的是有挂(2025已更新)(哔哩哔哩)1、科技揭秘!jj...
1分钟普及!哈灵麻将攻略小,微... 1分钟普及!哈灵麻将攻略小,微信小程序十三张好像存在有挂,规律教程(有挂技巧)哈灵麻将攻略小是一种具...
9分钟教程!科乐麻将有挂吗,传... 9分钟教程!科乐麻将有挂吗,传送屋高防版辅助(总是存在有挂)1、完成传送屋高防版辅助透视辅助安装,帮...
每日必看教程!兴动游戏辅助器下... 每日必看教程!兴动游戏辅助器下载(辅助)真是真的有挂(2025已更新)(哔哩哔哩)1、打开软件启动之...