描述:

介绍一个批处理脚本,用于简化springboot应用的启动、关闭和重启操作。本文将对比传统手动操作方式与使用脚本后的改进,展示如何通过简单的命令行菜单提高日常运维效率。


传统手动启动项目的步骤

在没有批处理脚本的情况下,启动、关闭和重启 通常都是 打开 终端 手动输入

cd path
java -jar xxx.jar
// 或后台运行
nohup java -jar xxx.jar > output.log &

停止应用程序还需要使用查找进程 来关闭

  使用`netstat -ano`命令查找占用端口5423的进程ID(PID)。
  使用`taskkill /pid <PID> /t /f`命令终止该进程。
既繁琐又复杂!

下面提供window的脚本
startup.bat

@echo off
setlocal enabledelayedexpansion

:: 配置项目名
set projectName=ecdis-main-dev-0.0.1-SNAPSHOT.jar

:: 配置项目端口号
set port=5423


:: 设置代码页为 UTF-8 (65001)
chcp 65001 >nul

:menu
cls
echo 1. 启动应用程序
echo 2. 关闭应用程序
echo 3. 重启应用程序
echo 4. 退出
echo ==========================
set /p choice=请选择一个选项 (1-4):

if "%choice%"=="1" goto startApp
if "%choice%"=="2" goto stopApp
if "%choice%"=="3" goto restartApp
if "%choice%"=="4" goto endScript
echo 无效的选择,请重试。
pause
goto menu

:startApp
echo 启动应用程序...
title %projectName%
java -jar %projectName%
pause
goto menu

:stopApp
echo 关闭应用程序...
for /f "tokens=1-5" %%i in ('netstat -ano ^| findstr ":%port%"') do (
    echo 终止使用端口 %port% 的进程 %%m
    taskkill /pid %%m /t /f
)
pause
goto menu

:restartApp
echo 重启应用程序...
call :stopApp
timeout /t 5 /nobreak >nul
call :startApp
pause
goto menu

:endScript
echo 退出脚本...
endlocal
exit /b

  • 注意修改成自己的jar包名称和端口号

在这里插入图片描述


将脚本文件放到和jar包同级后双击执行脚本

在这里插入图片描述

  1. 启动应用程序
  2. 关闭应用程序
  3. 重启应用程序
  4. 退出

linux脚本

startup.sh

#!/bin/bash
# ./ry.sh start 启动 stop 停止 restart 重启 status 状态 debug 调试模式
AppName=xxx-0.0.1-SNAPSHOT.jar
# jar 包的路径
APP_HOME=/usr/projectPath/


# JVM参数
JVM_OPTS="-Dname=$AppName -Xms512m -Xmx1024m "

echo "APP路径:$APP_HOME$AppName"
if [ "$1" = "" ];
then
    echo -e "\033[0;31m 未输入操作名 \033[0m  \033[0;34m {start|stop|restart|status|debug} \033[0m"
    exit 1
fi

if [ "$AppName" = "" ];
then
    echo -e "\033[0;31m 未输入应用名 \033[0m"
    exit 1
fi

function start()
{
    PID=`ps -ef |grep java|grep $AppName|grep -v grep|awk '{print $2}'`

    if [ x"$PID" != x"" ]; then
        echo "$AppName is running..."
    else
        nohup java $JVM_OPTS -jar $APP_HOME$AppName > /dev/null 2>&1 &
        echo "Start $AppName success..."
    fi
}

function stop()
{
    echo "Stop $AppName"

    PID=""
    query(){
        PID=`ps -ef |grep java|grep $AppName|grep -v grep|awk '{print $2}'`
    }

    query
    if [ x"$PID" != x"" ]; then
        kill -TERM $PID
        echo "$AppName (pid:$PID) exiting..."
        while [ x"$PID" != x"" ]
        do
            sleep 1
            query
        done
        echo "$AppName exited."
    else
        echo "$AppName already stopped."
    fi
}

function restart()
{
    stop
    sleep 2
    start
}

function status()
{
    PID=`ps -ef |grep java|grep $AppName|grep -v grep|wc -l`
    if [ $PID != 0 ];then
        echo "$AppName is running..."
    else
        echo "$AppName is not running..."
    fi
}

function debug()
{
    PID=`ps -ef |grep java|grep $AppName|grep -v grep|awk '{print $2}'`

    if [ x"$PID" != x"" ]; then
        echo "$AppName is already running..."
    else
        DEBUG_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:21212":
        nohup java $JVM_OPTS $DEBUG_OPTS -jar $APP_HOME$AppName > /dev/null 2>&1 &
        echo "Start $AppName in debug mode success..."
    fi
}

case $1 in
    start)
    start;;
    stop)
    stop;;
    restart)
    restart;;
    status)
    status;;
    debug)
    debug;;
    *)

esac

注意修改配置

在这里插入图片描述

脚本操作说明

  • 启动应用程序:

     bash startup.sh start
  • 关闭应用程序:

     bash startup.sh stop
  • 重启应用程序:

     bash startup.sh restart
  • 查看应用程序状态:

     bash startup.sh status
  • 启动应用程序并进入远程调试模式(socket 端口:21212)

     bash startup.sh debug
最后修改:2025 年 03 月 05 日
如果觉得我的文章对你有用,请随意赞赏