DATE = $ ( date + % Y % m % d % H % M ) # 基础路径 BASE_PATH = / home / mico - service - gateway # 编译后 jar包 的地址 SOURCE_PATH = $ BASE_PATH / build # 服务名称。同时约定部署服务的 jar 包名字也为它。 SERVER_NAME = mico - service - gateway - 0.0 .1 - RELEASE . jar # 健康检查 URL # HEALTH_CHECK_URL = http : / / 127.0 .0 .1 : 8078 / actuator / health / HEALTH_CHECK_URL = # heapError 存放路径 HEAP_ERROR_PATH = $ BASE_PATH / heapError # JVM 参数 JAVA_OPS = "-Xms1024m -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$HEAP_ERROR_PATH" # JavaAgent 参数。可用于配置 SkyWalking 等链路追踪 JAVA_AGENT = function backup ( ) { # 如果不存在,则无需备份 if [ ! - s $ BASE_PATH / $ SERVER_NAME ] ; then echo "[backup] $BASE_PATH/$SERVER_NAME 不存在,跳过备份" # 如果存在,则备份到 backup 目录下,使用时间作为后缀 echo "[backup] 开始备份 $SERVER_NAME ..." if [ ! - d $ BASE_PATH / backup ] ; then mkdir - p $ BASE_PATH / backup cp - rf $ BASE_PATH / $ SERVER_NAME $ BASE_PATH / backup / $ SERVER_NAME - $ DATE echo "[backup] 备份 $SERVER_NAME 完成" # 最新构建代码 移动到项目环境 function transfer ( ) { echo "[transfer] 开始转移 $SERVER_NAME" # 删除原 jar 包 if [ ! - s "$BASE_PATH/$SERVER_NAME" ] ; then echo "[transfer] $BASE_PATH/$SERVER_NAME 不存在,跳过删除" echo "[transfer] 移除 $BASE_PATH/$SERVER_NAME 完成" rm - rf $ BASE_PATH / $ SERVER_NAME ; # 复制新 jar 包 echo "[transfer] 从 $SOURCE_PATH 中获取 $SERVER_NAME 并迁移至 $BASE_PATH ...." cp - rf $ SOURCE_PATH / $ SERVER_NAME $ BASE_PATH echo "[transfer] 转移 $SERVER_NAME 完成" function stop ( ) { echo "[stop] 开始停止 $BASE_PATH/$SERVER_NAME" PID = $ ( ps - ef | grep $ BASE_PATH / $ SERVER_NAME | grep - v "grep" | awk '{print $2}' ) # 如果 Java 服务启动中,则进行关闭 if [ - n "$PID" ] ; then # 正常关闭 echo "[stop] $BASE_PATH/$SERVER_NAME 运行中,开始 kill [$PID]" kill - 15 $ PID # 等待最大 60 秒,直到关闭完成。 for ( ( i = 0 ; i < 60 ; i ++ ) ) sleep 1 PID = $ ( ps - ef | grep $ BASE_PATH / $ SERVER_NAME | grep - v "grep" | awk '{print $2}' ) if [ - n "$PID" ] ; then echo - e ".\c" echo '[stop] 停止 $BASE_PATH/$SERVER_NAME 成功' break # 如果正常关闭失败,那么进行强制 kill - 9 进行关闭 if [ - n "$PID" ] ; then echo "[stop] $BASE_PATH/$SERVER_NAME 失败,强制 kill -9 $PID" kill - 9 $ PID # 如果 Java 服务未启动,则无需关闭 echo "[stop] $BASE_PATH/$SERVER_NAME 未启动,无需停止" function start ( ) { # 开启启动前,打印启动参数 echo "[start] 开始启动 $BASE_PATH/$SERVER_NAME" echo "[start] JAVA_OPS: $JAVA_OPS" echo "[start] JAVA_AGENT: $JAVA_AGENT" # 开始启动 BUILD_ID = dontKillMe nohup java - server $ JAVA_OPS $ JAVA_AGENT - jar $ BASE_PATH / $ SERVER_NAME & sleep 3 PID = $ ( ps - ef | grep "$BASE_PATH/$SERVER_NAME" | grep - v grep | awk '{ print $2 }' ) echo "[start] 启动 $BASE_PATH/$SERVER_NAME 完成,服务进程:$PID" # 健康检查 function healthCheck ( ) { # 如果配置健康检查,则进行健康检查 if [ - n "$HEALTH_CHECK_URL" ] ; then # 健康检查最大 60 秒,直到健康检查通过 echo "[healthCheck] 开始通过 $HEALTH_CHECK_URL 地址,进行健康检查" ; for ( ( i = 0 ; i < 60 ; i ++ ) ) # 请求健康检查地址,只获取状态码。 result = `curl -I -m 10 -o /dev/null -s -w %{http_code} $HEALTH_CHECK_URL || echo "000"` # 如果状态码为 200 ,则说明健康检查通过 if [ "$result" == "200" ] ; then echo "[healthCheck] 健康检查通过" ; break # 如果状态码非 200 ,则说明未通过。sleep 1 秒后,继续重试 echo - e ".\c" sleep 1 # 健康检查未通过,则异常退出 shell 脚本,不继续部署。 if [ ! "$result" == "200" ] ; then echo "[healthCheck] 健康检查不通过,可能部署失败。查看日志,自行判断是否启动成功" ; tail - n 10 nohup . out exit 1 ; # 健康检查通过,打印最后 10 行日志,可能部署的人想看下日志。 tail - n 10 nohup . out # 如果未配置健康检查,则 slepp 1 秒,人工看日志是否部署成功。 echo "[healthCheck] HEALTH_CHECK_URL 未配置,通过进程查询健康检查 开始 sleep 1 秒" ; sleep 1 ps - ef | grep $ BASE_PATH / $ SERVER_NAME | grep - v grep if [ $ ? - ne 0 ] echo "[healthCheck] 目前服务进程已存在,暂定认为启动成功,查看日志,确定是否启动成功" ; echo "[healthCheck] 目前未发现服务进程,启动失败,请查看日志,自行判断是否启动成功" ; tail - 10 f nohup . out #回退jar包 function jarRollBack ( ) { echo "[rollBack]回退开始 jar包为:`ls -l $BASE_PATH/backup| tail -n 1 | awk '{print $9}'`" #获取最新的jar包 fileName = `ls -l $BASE_PATH/backup | tail -n 1 | awk '{print $9}'` ; #删除当前jar包 , 检查jar包是否存在,不存在,无需删除 if [ ! - s $ BASE_PATH / $ SERVER_NAME ] ; then echo "[rollBack]jar包回退,发现真实jar包不存在,跳过删除操作" rm - rf $ BASE_PATH / $ SERVER_NAME ; #将最新jar包回归原位,待重新启动做准备 cp - rf $ BASE_PATH / backup / $fileName $ BASE_PATH / $ SERVER_NAME ; echo "[rollBack]jar包回退完毕 " function deploy ( ) { # cd $ BASE_PATH # 备份原 jar backup # 停止 Java 服务 # 部署新 jar transfer # 启动 Java 服务 start # 健康检查 healthCheck function rollback ( ) { cd $ BASE_PATH # 停止 Java 服务 # jar 包回退 jarRollBack # 启动 Java 服务 start # 健康检查 healthCheck if [ $# - ne 1 ] echo "服务一键启动或回退发生未知异常,偷偷告诉你:小子,动机不存,口令缺失" exit 1 # 如果是发布命令,则部署吧 if [ "$1" = "deploy" ] deploy ; exit 1 # 如果是回退命令,则回退吧 if [ "$1" = "rollback" ] rollback ; exit 1 echo "小子,干啥呢?果真动机不存,是想进局子吧?" exit 1 ; linux 服务一键更新回滚发布shell脚本#!/bin/bashset -eDATE=$(date +%Y%m%d%H%M)# 基础路径BASE_PATH=/home/mico-service-gateway# 编译后 jar包 的地址SOURCE_PATH=$BASE_PATH/build# 服务名称。同时约定部署服务的 jar 包名字也为它。SERVER_NAME=mico-service-gateway-0.0.1-RELEASE.jar# 健康检查 URL#HEALTH_
平台前端文件的升级与 回滚 平时工作时不时需要替换正式和内测环境的前端文件, 服务 器通过堡垒机登录,可上传文件到 /tmp 目录,而且有多个平台路径,所以编写以下 脚本 ,用于工作 #!/bin/bash # author: zhangsx # info: 平台前端文件升级 回滚 脚本 DATE=$(date +%Y%m%d_%H%M%S) TEST01=/data/html01 # 平台前端文件根目录 TEST02=/data/html02 TEST03=/da
俗话说的好:“真男人从来不 回滚 ”,但是家中常备一个 回滚 脚本 也是很有必要的,我所在公司的 服务 器模块名都是在初始化的时候写进/etc/role_install这个文件里,如下图的这个 服务 器就是fss 服务 器:再比如下面这个 服务 器,虽然包含nginx的组件但是httpproxy的 服务 器:那么有了这样的前提,整个 回滚 脚本 内容如下:#!/bin/bash #WrittenbyChr...
现在每次 发布 的时候,都要求备份当前线上能运行的分支,很是麻烦,很多时候都会忘记。所以写了一个 脚本 无论在哪个分支,都可以切回rollback 分支,然后在这个分支拉取远程master 代码,备份。然后再切回来。 如果权限足够的话,可以直接写在 发布 脚本 中,在 发布 之前自动备份 # backup.sh # 执行 git status 指令,并将无代码修改的这种状况进行筛选 。| grep "" 是匹配字符串并将这一行截取 status=`git status | grep "working tree clean"
脚本 功能使用该 脚本 完成SOA工程的全量 更新 、增量 更新 、全量 回滚 等操作。自动部署流程 3. 脚本 代码#!/usr/bin/python #coding=utf-8 importsys,os,re,time,commands,logging work_dir='/data/company/soa' package_dir='/data/package/soa' updat...
### 回答1: 回答:可以使用 shell 脚本 来实现jar包的启动、停止、 更新 回滚 功能。可以编写一个 脚本 ,其中包括启动和停止jar包的命令, 更新 jar包的命令,以及 回滚 到特定版本的命令。例如:# 启动jar包 java -jar myJar.jar# 停止jar包 pkill -f myJar.jar# 更新 jar包 wget -O myJar.jar http://www.example.com/myJar.jar# 回滚 jar包 wget -O myJar.jar http://www.example.com/myJar_old.jar ### 回答2: 下面是一个简单的 shell 脚本 示例,用于实现jar包的启动、停止、 更新 回滚 功能: ```bash #!/bin/bash # 配置变量 JAR_FILE="myapp.jar" PID_FILE="pid.txt" BACKUP_DIR="backup" # 启动函数 start() { if [ -f $PID_FILE ]; then echo "应用已经在运行中." nohup java -jar $JAR_FILE > /dev/null 2>&1 & echo $! > $PID_FILE echo "应用已启动." # 停止函数 stop() { if [ -f $PID_FILE ]; then kill $(cat $PID_FILE) rm $PID_FILE echo "应用已停止." echo "应用未运行." # 更新 函数 update() { if [ -f $PID_FILE ]; then backup_time=$(date +"%Y%m%d%H%M%S") backup_file="$BACKUP_DIR/$JAR_FILE.$backup_time" cp $JAR_FILE $backup_file echo "已备份当前版本." mv new_version.jar $JAR_FILE echo " 更新 完成." echo "应用未运行." # 回滚 函数 rollback() { latest_backup=$(ls -t $BACKUP_DIR/$JAR_FILE.* | head -n 1) if [ -f $latest_backup ]; then cp $latest_backup $JAR_FILE echo "已 回滚 到上一个备份版本." echo "未找到备份文件." # 主程序 case "$1" in start) start stop) update) update rollback) rollback echo "用法: $0 {start|stop|update|rollback}" exit 1 请注意,以上 脚本 仅提供一个简单的示例,具体根据实际情况可能需要进行修改和调整。 ### 回答3: 以下是一个使用 shell 脚本 实现jar包启动、停止、 更新 回滚 功能的示例: ```bash #!/bin/bash # 设置jar包路径 JAR_PATH="/path/to/your/jar/file.jar" # 设置启动命令 START_COMMAND="java -jar $JAR_PATH" # 设置备份文件夹路径 BACKUP_FOLDER="/path/to/your/backup/folder" # 设置备份文件名 BACKUP_FILE="backup-$(date +%Y%m%d%H%M%S).jar" # 启动函数 start() { if pgrep -f $JAR_PATH > /dev/null; then echo "Jar包已在运行中." echo "启动Jar包..." $START_COMMAND & echo "Jar包已启动." # 停止函数 stop() { if pgrep -f $JAR_PATH > /dev/null; then echo "停止Jar包..." kill $(pgrep -f $JAR_PATH) echo "Jar包已停止." echo "Jar包未运行." # 更新 函数 update() { if pgrep -f $JAR_PATH > /dev/null; then echo "停止Jar包..." kill $(pgrep -f $JAR_PATH) echo "Jar包已停止." echo "备份Jar包..." cp $JAR_PATH $BACKUP_FOLDER/$BACKUP_FILE echo "开始 更新 ..." # 执行 更新 操作,如下载最新的jar包到JAR_PATH路径下 echo "启动 更新 后的Jar包..." $START_COMMAND & echo " 更新 完成." # 回滚 函数 rollback() { if pgrep -f $JAR_PATH > /dev/null; then echo "停止Jar包..." kill $(pgrep -f $JAR_PATH) echo "Jar包已停止." LATEST_BACKUP=$(ls -t $BACKUP_FOLDER | head -n 1) if [ -z "$LATEST_BACKUP" ]; then echo "没有可用的备份文件." exit 1 echo "恢复备份文件 $LATEST_BACKUP..." cp $BACKUP_FOLDER/$LATEST_BACKUP $JAR_PATH echo "启动 回滚 后的Jar包..." $START_COMMAND & echo " 回滚 完成." # 主函数 main() { case "$1" in start) start stop) update) update rollback) rollback echo "Usage: $0 {start|stop|update|rollback}" exit 1 # 执行主函数 main "$@" 以上 脚本 使用`JAR_PATH`变量设置jar包的路径,`START_COMMAND`变量设置启动命令,`BACKUP_FOLDER`变量设置备份文件夹的路径。在启动、停止、 更新 回滚 函数中,根据需要执行相应的操作。启动和停止函数使用`pgrep`命令检查jar包进程是否在运行并执行相应的操作。 更新 函数备份当前的jar包文件,执行 更新 操作,然后启动 更新 后的jar包。 回滚 函数从备份文件夹中获取最新的备份文件,恢复为原始的jar包文件,然后启动 回滚 后的jar包。最后,通过命令行参数选择执行相应的操作。