【工具-Shell脚本】java程序产品包模板-linux和windows通用shell启动停止脚本(无需系统安装Java运行环境)

此模板已打包上传,可直接点击下载

产品包目录结构

目录结构
source
config

Linux脚本

  1. 替换source/application.jar为你的jar;
  2. 修改start.sh中第3行的APP_NAME为你的jar名称;
  3. 修改stop.sh中第2行的APP_NAME为你的jar名称;
  4. Linux下执行chmod +x *.sh给sh脚本赋予执行权限;
  5. Linux下执行sh ./unZipJDK.sh解压JDK;
  6. Linux下执行sh ./start.sh
  7. Linux下执行sh tail -f nohup…(省略)可查看控制台输出日志

注意:以下Linux脚本文件需要为Unix兼容格式(LF)
(区别:Windows默认CRLF回车换行符为\r\n,Unix的LF格式回车换行符为\n)

启动脚本start.sh

#!/bin/bash
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
APP_NAME="application.jar"
APP_PORT=`sed -n '/^port/p' config/port.config | awk -F'=' '{print $2}'`
JMX_PORT=`sed -n '/^jmx-port/p' config/port.config | awk -F'=' '{print $2}'`
DUMP_DIR=$DIR/dump
if [ ! -d "${DUMP_DIR}" ]; then
    mkdir -vp ${DUMP_DIR}
fi

JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx1g -Duser.timezone=Asia/shanghai"
JAVA_OPT="${JAVA_OPT} -XX:+UseG1GC"
JAVA_OPT="${JAVA_OPT} -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${DUMP_DIR}/java_error_in_application_%p.hprof"
 
if [ ! "0$JMX_PORT" -gt "0" ]
then
    echo "没有指定 JMX 远程端口,将无法进行远程监控"
else
    echo "指定JMX端口为: $JMX_PORT"
    echo "尝试获取本机 ip 地址"
    IP_ADDR='127.0.0.1'
    IP_ADDR=$(ip addr | awk '/^[0-9]+: / {}; /inet.*global/ {print gensub(/(.*)\/(.*)/, "\\1", "g", $2)}' | head -1)
    echo "成功获取本机 ip 地址: $IP_ADDR"
    JAVA_OPT="${JAVA_OPT} -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=${JMX_PORT} -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=${IP_ADDR}"
fi
 
echo "程序运行参数为: ${JAVA_OPT}"
echo "程序运行端口为: ${APP_PORT}"
 
nohup jdk1.8.130/bin/java ${JAVA_OPT} -jar source/${APP_NAME} --server.port=${APP_PORT} > nohup_${APP_NAME}_${APP_PORT}.out 2>&1 &

停止脚本stop.sh

#!/bin/bash
APP_NAME="application.jar"
# 输入参数为要关闭Application的访问端口号
if [ -z "$1" ]
then
    pid=`ps ax |grep -i ${APP_NAME} |grep java | grep -v grep |  awk '{print $1}'`
else
    pid=`ps ax |grep -i ${APP_NAME} |grep java | grep -i 'server.port='''${1}''''| grep -v grep |  awk '{print $1}'`
fi
 
if [ -z "$pid" ] ; then
        echo "application is not running."
        exit 0;
fi
echo "application(${pid}) is running."
echo "Send shutdown request to application(${pid})....."
kill -9 ${pid}
echo "Shutdown application(${pid}) success."

解压JDK脚本unZipJDK.sh

#!/bin/bash
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
if [ ! -d $DIR/jdk1.8.311 ];then
    echo "正在解压jdk..."
    tar -zxf source/jdk-8u311-linux-x64.tar.gz -C $DIR
    echo "jdk解压完成"
else
    echo "已存在目录jdk1.8.311, 请勿重复解压JDK, 退出本脚本..."
fi

端口配置port.config

#app port
port=8080
#JMX port
jmx-port=

Windows脚本

使用说明:

  1. 修改run.batJAVA_JAR为你的jar名称
  2. 控制台启动:双击run.bat文件
  3. 后台启动:命令行执行run.bat start
  4. 关闭程序:命令行执行run.bat stop

启停脚本run.bat

title Application(Java)

@echo off

rem ===========================================================

set JAVA_HOME_TEMP=source\jdk1.8.0_311

set JAVA_OPTS=-Xms4g -Xmx4g -Dfile.encoding=utf-8

set JAVA_JAR=source\application.jar

set PORT=9999

set LAUNCH_ARGS=--server.port=%PORT%

rem ===========================================================

set CLASSPATH_TEMP=".;%JAVA_HOME_TEMP%\bin;%JAVA_HOME_TEMP%\lib\dt.jar;%JAVA_HOME_TEMP%\lib\tools.jar"

rem 接收传入参数

if "%1"=="" goto doStartConsole

if "%1"=="start" goto doStart

if "%1"=="stop" goto doShutdown

:doStartConsole

set CMD=startConsole

goto doExe

:doStart

set CMD=start

goto doExe

:doShutdown

set CMD=stop

goto doExe

:doExe

echo ===========================================================

echo Java Home: %JAVA_HOME_TEMP%

echo JVM Parameters:%JAVA_OPTS:"=%

echo Start Jar: %JAVA_JAR:"=%

echo Start Parameters: %LAUNCH_ARGS:"=%

echo Execute Command: %CMD%

echo ===========================================================

echo.
if "%CMD%" == "startConsole" (
    %JAVA_HOME_TEMP%\bin\java %JAVA_OPTS% -classpath %CLASSPATH_TEMP% -server -jar %JAVA_JAR% %LAUNCH_ARGS%
) else if "%CMD%" == "start" (
    START %TITLE% /min %JAVA_HOME_TEMP%\bin\javaw %JAVA_OPTS% -classpath %CLASSPATH_TEMP% -server -jar %JAVA_JAR% %LAUNCH_ARGS%
) else if "%CMD%" == "stop" (
    for /f "tokens=1-5" %%a in ('netstat -ano ^| find ":%PORT%"') do (
        if "%%e%" == "" (
            set pid=%%d
        ) else (
            set pid=%%e
        )
        echo %pid%
        taskkill /f /pid %pid%
    )
)

goto end

:notParam

echo not params

:end

if "%CMD%" == "start" (
    echo 已后台启动!
)
if "%CMD%" == "stop" (
    echo 已停止!
)
if "%CMD%" == "startConsole" (
    pause
)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~往期精选🪶~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

【前端-开发环境】使用NVM实现不同nodejs版本的自由切换(NVM完整安装使用手册)
【前端-NPM私服】内网使用verdaccio搭建私有npm服务器
【前端-IE兼容】Win10和Win11使用Edge调试前端兼容IE6、IE7、IE8、IE9、IE10、IE11问题
【工具-Nginx】Nginx高性能通用配置文件-注释版-支持防刷限流、可控高并发、HTTP2、防XSS、Gzip、OCSP Stapling、负载、SSL
【工具-WireShark】网络HTTP抓包使用教程
【后端-maven打包】通过profile标签解决同时打jar包 war包需求
【工具-Flyway】优雅的数据库版本控制方式,无需每个版本发布数据库变动脚本
【后端-SpringCache】基于Spring Cache封装一个能够批量操作的Redis缓存记录下踩坑历程(pipeline或mget封装)
【后端-SkyWalking】SkyWalking前后端开发环境搭建详细教程步骤-6.x/7.x/8.x版本通用-插件二次开发利器(一)

✨欢迎为耿直少年点赞、关注、收藏!!!

👇👇👇

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fun肆编程

欢迎投喂

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值