描述:
介绍一个批处理脚本,用于简化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包同级后双击执行脚本
- 启动应用程序
- 关闭应用程序
- 重启应用程序
- 退出
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