优雅关闭jar程序shell 脚本

技术标签: python  java  Linux  jar  

参考竽道Linux部署

#!/bin/bash
set -e

DATE=$(date +%Y%m%d%H%M)
# 基础路径
BASE_PATH=/work/projects/yudao-server
# 服务名称。同时约定部署服务的 jar 包名字也为它。
SERVER_NAME=yudao-server
# 环境
PROFILES_ACTIVE=dev

# heapError 存放路径
HEAP_ERROR_PATH=$BASE_PATH/heapError
# JVM 参数
JAVA_OPS="-Xms512m -Xmx512m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$HEAP_ERROR_PATH"

# SkyWalking Agent 配置
#export SW_AGENT_NAME=$SERVER_NAME
#export SW_AGENT_COLLECTOR_BACKEND_SERVICES=192.168.0.84:11800
#export SW_GRPC_LOG_SERVER_HOST=192.168.0.84
#export SW_AGENT_TRACE_IGNORE_PATH="Redisson/PING,/actuator/**,/admin/**"
#export JAVA_AGENT=-javaagent:/work/skywalking/apache-skywalking-apm-bin/agent/skywalking-agent.jar

# 停止:优雅关闭之前已经启动的服务
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
        # 等待最大 120 秒,直到关闭完成。
        for ((i = 0; i < 120; i++))
            do
                sleep 1
                PID=$(ps -ef | grep $BASE_PATH/$SERVER_NAME | grep -v "grep" | awk '{print $2}')
                if [ -n "$PID" ]; then
                    echo -e ".\c"
                else
                    echo '[stop] 停止 $BASE_PATH/$SERVER_NAME 成功'
                    break
                fi
		    done

        # 如果正常关闭失败,那么进行强制 kill -9 进行关闭
        if [ -n "$PID" ]; then
            echo "[stop] $BASE_PATH/$SERVER_NAME 失败,强制 kill -9 $PID"
            kill -9 $PID
        fi
    # 如果 Java 服务未启动,则无需关闭
    else
        echo "[stop] $BASE_PATH/$SERVER_NAME 未启动,无需停止"
    fi
}

# 启动:启动后端项目
function start() {
    
    # 开启启动前,打印启动参数
    echo "[start] 开始启动 $BASE_PATH/$SERVER_NAME"
    echo "[start] JAVA_OPS: $JAVA_OPS"
    echo "[start] JAVA_AGENT: $JAVA_AGENT"
    echo "[start] PROFILES: $PROFILES_ACTIVE"

    # 开始启动
    nohup java -server $JAVA_OPS $JAVA_AGENT -jar $BASE_PATH/$SERVER_NAME.jar --spring.profiles.active=$PROFILES_ACTIVE > nohup.out 2>&1 &
    echo "[start] 启动 $BASE_PATH/$SERVER_NAME 完成"
}

# 部署
function deploy() {
    
    cd $BASE_PATH
    # 第一步:停止 Java 服务
    stop
    # 第二步:启动 Java 服务
    start
}

deploy

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_35385687/article/details/137679116

智能推荐

leetcode-4.17[819. 最常见的单词、1108. IP 地址无效化、55. 跳跃游戏](python解法)_python里为什么会出现这样的结果? >>> -10//3, 10//-3, -10//-3, --程序员宅基地

文章浏览阅读141次。题目1题解1from queue import PriorityQueueclass Solution: def mostCommonWord(self, paragraph: str, banned: List[str]) -> str: pq = PriorityQueue(maxsize=0) for c in "!?',;.": ..._python里为什么会出现这样的结果? >>> -10//3, 10//-3, -10//-3, -(10//3) (-4, -

[569]tf.nn.embedding_lookup函数_tf.nn.embedding_lookup(-程序员宅基地

文章浏览阅读470次。我觉得这张图就够了,实际上tf.nn.embedding_lookup的作用就是找到要寻找的embedding data中的对应的行下的vector。tf.nn.embedding_lookup(params, ids, partition_strategy=‘mod’, name=None, validate_indices=True, max_norm=None)参数说明:par..._tf.nn.embedding_lookup(

Keil4添加STC系列单片机_keil4没有stc怎么办-程序员宅基地

文章浏览阅读6.5k次,点赞6次,收藏18次。俗话说:工欲善其事,必先利其器。在学习一门编程语言之前,我们必须先安装好它的开发环境,由于工作需求不得不去研究C51单片机的知识。下面就开始安装我们的开发环境keil4。1,、打开keil的官网http://www.keil.com/c512、鼠标移到C51V960A.EXE,右键鼠标点击在新标签页打开链接,点击后浏览器就开始下载了(如果你的电脑下载了下载软件,那么就在你的下载软件中下载..._keil4没有stc怎么办

table选项卡原理_table 选项卡-程序员宅基地

文章浏览阅读332次。table选项卡原理$(this).addClass("active").siblings().removeClass("active");_table 选项卡

Linux多线程【初识线程】-程序员宅基地

文章浏览阅读1.6k次,点赞98次,收藏94次。将一份代码成功编译后,可以得到一个可执行程序,程序运行后,相关代码和数据被load到内存中,并且操作系统会生成对应数据结构(比如PCB)对其进行管理及分配资源,准备工作做完之后,我们就可以得到一个运行中的程序,简称为进程,对于操作系统来说,光有进程的概念是无法满足高效运行的需求的,因此需要一种执行粒度更细、调度成本更低的执行流,而这就是线程Windows中的线程

【matlab】QR分解_matlab qr分解-程序员宅基地

文章浏览阅读2.5k次,点赞25次,收藏29次。这说明对于垂直于w的向量,householder变换的作用就是对其不起任何作用,那么对于一个普通的向量v来说,平行于w的分量被householder反向,垂直于w的分量不变,那么最终的效果就是将向量v作关于法向量为w的平面的镜像对称。给定一个m×n的矩阵A,其中m≥n,即矩阵A是高矩阵或者是方阵,QR分解将矩阵A分解为两个矩阵Q和R的乘积,其中矩阵Q是一个m×n的各列正交的矩阵,即QTQ=I,矩阵R是一个n×n的上三角矩阵,其对角线元素为正。,an是线性无关的,而且得到了一个正交向量组q1,q2,_matlab qr分解

随便推点

org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component-程序员宅基地

文章浏览阅读6k次,点赞7次,收藏5次。前两天接手公司Dorado项目,由于IDEA中没有 Dorado插件,无奈又下载了eclipse(ps:个人还是比较喜欢用idea的)eclipse带Dorado插件的链接:https://pan.baidu.com/s/1SayfdnlWELGuY9AE6BTiKg 提取码:t7vw刚接手Dorado,不太熟找个例子试下,Dorado文档,根据文档介绍,笔者一步一步的开始搭建项目,..._org.springframework.beans.factory.beandefinitionstoreexception: failed to re

数字图像处理-基本知识总结_数字图像处理学习-程序员宅基地

文章浏览阅读490次。我们人类在从不同距离,不同方向,不同光照条件下观察一个物体时,虽然这个物体的大小,形状,明暗都会有不同,但是我们仍然可以判断出,它们是同一个物体。由于图片中存在噪声,导数对噪声敏感,如果直接提取边缘,会有许多噪声的地方也会出现极值,所以先用高斯平滑滤波,可以突出图片中边缘,去除噪声;注:由于提取边缘用的高斯滤波,高斯平滑函数的σ决定高斯函数的胖瘦和高低,即决定边缘提取的精度,σ越小,边缘提取越精确。由于图片中的边缘是分布在不同方向上的,比如横着方向提取的边缘,表示图片在这一区域的像素值,横着方向变化剧烈。_数字图像处理学习

逻辑分析仪Kingst第一天_kingstvis-程序员宅基地

文章浏览阅读5.9k次,点赞3次,收藏14次。1、安装软件——KingstVISKingstVSI软件安装地址没有安装难度,就一顿下一步就行,有个驱动安装窗口一定要点安装2、软件安装完,界面如下图:包含4部分:工具栏、通道设备栏、波形显示窗口、采样结果分析窗口..._kingstvis

实践中学习vim之vim配置文件、插件文件加载路径_gvim 添加脚本加载路径-程序员宅基地

文章浏览阅读1.6k次。From:http://blog.csdn.net/smstong/article/details/205672350 引言理解vim的启动过程对于增强使用vim的信心非常重要,本文所有的信息均来自vim自身提供的参考手册和作者实际操作实践。VIM REFERENCE MANUAL的Starting Vim这节详细描述了vim的启动过程。vim完整的启动过程非常复杂,因为要_gvim 添加脚本加载路径

Java JDK安装小谈_jdk7u10windows-程序员宅基地

文章浏览阅读528次。我用的是当前最新版jdk-7u10-windows-i586。安装时有两个需要选择的安装路径,一个是JDK一个是JRE。两个最好安装在同一文件夹下。jre7即为jre安装文件包。接着便按步骤来,没什么难得。最重要的是设置环境变量,网上的各种教程有些混乱,而且大多没讲清楚,这里简单说一下。配置环境变量只需要配置两个参数:path和classpath。网上有的教程配置了JAVA_jdk7u10windows

推荐文章

热门文章

相关标签