jar 启动脚本

发布于:2025-08-07 ⋅ 阅读:(27) ⋅ 点赞:(0)

目录

1. Linux / macOS

2. Windows

3. 停止脚本(Linux /macOS)

4. 停止脚本(Windows)

如果有进程 杀掉,重启


比如程序叫: xxx-app

总结:

启动脚本(进程存在先关闭,再启动)

start.sh

#!/bin/bash

# 定义JVM参数
JVM_OPTS="-Xms1024m -Xmx1024m"

# 定义应用名称和路径
APP_NAME="xxx-app"
APP_JAR="/home/xxx-app.jar"



# 检查进程是否存在并杀掉
PID=$(ps -ef | grep java | grep "$APP_JAR" | awk '{print $2}')
if [ -n "$PID" ]; then
    echo "App is running with PID: $PID. Killing it..."
    kill -9 $PID
fi

# 启动应用
nohup java $JVM_OPTS -jar $APP_JAR  &

#启动应用,写文件
#nohup java $JVM_OPTS -jar $APP_JAR > $APP_NAME.out 2>&1 &

echo $! > $APP_NAME.pid
echo "App has been restarted."



授权:chmod +x start.sh

关闭脚本

stop.sh

#!/bin/bash

# 定义应用名称和路径
APP_NAME="xxx-app"
APP_JAR="/home/xxx-app.jar"



# 检查进程是否存在并杀掉
PID=$(ps -ef | grep java | grep "$APP_JAR" | awk '{print $2}')
if [ -n "$PID" ]; then
    echo "App is running with PID: $PID. Killing it..."
    kill -9 $PID
fi

授权:chmod +x stop.sh

脚本说明:
#!/bin/bash:指定脚本使用的 Shell 解释器。
JVM_OPTS:设置 JVM 的初始堆大小(-Xms)和最大堆大小(-Xmx)。你可以根据应用的需求调整这些参数。
APP_NAME:定义应用的名称,用于日志文件和 PID 文件命名。
APP_JAR:指定 JAR 文件的路径。请将 /path/to/your - app.jar 替换为实际的 JAR 文件路径。
nohup java $JVM_OPTS -jar $APP_JAR > $APP_NAME.out 2>&1 &:使用 nohup 命令在后台运行 Java 应用,并将标准输出和标准错误重定向到 $APP_NAME.out 文件。& 符号表示在后台运行该命令。
echo $! > $APP_NAME.pid:将应用的进程 ID(PID)写入 $APP_NAME.pid 文件,方便后续停止应用。


PID=$(ps -ef | grep java | grep "$APP_JAR" | awk '{print $2}'):通过 ps -ef 命令列出所有进程,然后使用 grep 筛选出与 Java 和应用 JAR 文件相关的进程行,最后通过 awk 提取进程 ID(PID)。
if [ -n "$PID" ]; then...:检查是否找到 PID,如果找到则输出提示信息并使用 kill -9 强制杀掉进程。

以下是不同操作系统下启动 JAR 文件的脚本示例:

1. Linux / macOS

在 Linux 和 macOS 系统中,你可以创建一个简单的 Shell 脚本。假设你的 JAR 文件名为 your - app.jar,以下是一个基本的启动脚本:

#!/bin/bash

# 定义JVM参数
JVM_OPTS="-Xms1024m -Xmx1024m"

# 定义应用名称和路径
APP_NAME="xxx-app"
APP_JAR="/path/to/xxx-app.jar"

# 启动应用
nohup java $JVM_OPTS -jar $APP_JAR > $APP_NAME.out 2>&1 &
echo $! > $APP_NAME.pid

脚本说明

  • #!/bin/bash:指定脚本使用的 Shell 解释器。
  • JVM_OPTS:设置 JVM 的初始堆大小(-Xms)和最大堆大小(-Xmx)。你可以根据应用的需求调整这些参数。
  • APP_NAME:定义应用的名称,用于日志文件和 PID 文件命名。
  • APP_JAR:指定 JAR 文件的路径。请将 /path/to/xxx-app.jar 替换为实际的 JAR 文件路径。
  • nohup java $JVM_OPTS -jar $APP_JAR > $APP_NAME.out 2>&1 &:使用 nohup 命令在后台运行 Java 应用,并将标准输出和标准错误重定向到 $APP_NAME.out 文件。& 符号表示在后台运行该命令。
  • echo $! > $APP_NAME.pid:将应用的进程 ID(PID)写入 $APP_NAME.pid 文件,方便后续停止应用。

2. Windows

在 Windows 系统中,你可以创建一个批处理脚本(.bat 文件)。假设你的 JAR 文件名为 xxx-app.jar,以下是一个基本的启动脚本:

@echo off

REM 定义JVM参数
set JVM_OPTS=-Xms1024m -Xmx1024m

REM 定义应用名称和路径
set APP_NAME=xxx-app
set APP_JAR=C:\path\to\xxx-app.jar

REM 启动应用
start "xxx-app" java %JVM_OPTS% -jar %APP_JAR% > %APP_NAME%.out 2>&1

脚本说明

  • @echo off:关闭命令回显,使脚本执行时屏幕更简洁。
  • set JVM_OPTS=-Xms1024m -Xmx1024m:设置 JVM 参数。
  • set APP_NAME=xxx-app 和 set APP_JAR=C:\path\to\xxx-app.jar:分别定义应用名称和 JAR 文件路径。请将 C:\path\to\your - app.jar 替换为实际路径。
  • start "xxx-app" java %JVM_OPTS% -jar %APP_JAR% > %APP_NAME%.out 2>&1:使用 start 命令在新的命令窗口中启动 Java 应用,并将标准输出和标准错误重定向到 %APP_NAME%.out 文件。

3. 停止脚本(Linux /macOS)

为了停止上述启动的应用,你可以创建一个停止脚本:

#!/bin/bash

# 定义应用名称
APP_NAME="xxx-app"

# 检查PID文件是否存在
if [ -f $APP_NAME.pid ]; then
    PID=$(cat $APP_NAME.pid)
    echo "Stopping application with PID: $PID"
    kill -9 $PID
    rm $APP_NAME.pid
else
    echo "PID file not found. Application may not be running."
fi

脚本说明

  • 首先检查 PID 文件是否存在。如果存在,读取 PID 并使用 kill -9 命令强制终止进程,然后删除 PID 文件。如果 PID 文件不存在,提示应用可能未运行。

4. 停止脚本(Windows)

在 Windows 下,停止脚本会稍微复杂一些,因为 Windows 没有像 Linux 那样简单的 PID 文件机制。你可以使用任务管理器相关命令来查找并停止进程:

@echo off

REM 定义应用名称
set APP_NAME=your - app

REM 查找并停止Java进程
for /f "tokens=2 delims= " %%a in ('tasklist /fi "imagename eq java.exe" /v ^| find /i "%APP_NAME%"') do (
    taskkill /f /pid %%a
)

脚本说明

  • for /f 循环结合 tasklist 和 find 命令查找包含应用名称的 Java 进程,并使用 taskkill 命令强制终止该进程。

这些脚本提供了基本的 JAR 文件启动和停止功能,你可以根据实际需求进行调整和扩展。例如,添加更多的 JVM 参数、日志管理功能等。

如果有进程 杀掉,重启

  1. Linux /macOS 脚本实现
    • 以下是一个结合检查进程、杀掉进程并重启应用的 Shell 脚本:
#!/bin/bash

# 定义JVM参数
JVM_OPTS="-Xms1024m -Xmx1024m"

# 定义应用名称和路径
APP_NAME="xxx-app"
APP_JAR="/path/to/xxx-app.jar"

# 检查进程是否存在并杀掉
PID=$(ps -ef | grep java | grep "$APP_JAR" | awk '{print $2}')
if [ -n "$PID" ]; then
    echo "App is running with PID: $PID. Killing it..."
    kill -9 $PID
fi

# 重启应用
nohup java $JVM_OPTS -jar $APP_JAR > $APP_NAME.out 2>&1 &
echo $! > $APP_NAME.pid
echo "App has been restarted."

  • 脚本说明
    • PID=$(ps -ef | grep java | grep "$APP_JAR" | awk '{print $2}'):通过 ps -ef 命令列出所有进程,然后使用 grep 筛选出与 Java 和应用 JAR 文件相关的进程行,最后通过 awk 提取进程 ID(PID)。
    • if [ -n "$PID" ]; then...:检查是否找到 PID,如果找到则输出提示信息并使用 kill -9 强制杀掉进程。
    • 后续部分与之前的启动脚本类似,重新启动应用并将输出重定向到日志文件,同时记录新的 PID。
  1. Windows 脚本实现
    • 对于 Windows 系统,批处理脚本实现如下:
@echo off

REM 定义JVM参数
set JVM_OPTS=-Xms1024m -Xmx1024m

REM 定义应用名称和路径
set APP_NAME=xxx-app
set APP_JAR=C:\path\to\xxx-app.jar

REM 查找并杀掉Java进程
for /f "tokens=2 delims= " %%a in ('tasklist /fi "imagename eq java.exe" /v ^| find /i "%APP_JAR%"') do (
    taskkill /f /pid %%a
)

REM 重启应用
start "xxx-app" java %JVM_OPTS% -jar %APP_JAR% > %APP_NAME%.out 2>&1

echo "App has been restarted."

  • 脚本说明
    • for /f "tokens=2 delims= " %%a in ('tasklist /fi "imagename eq java.exe" /v ^| find /i "%APP_JAR%"') do...:使用 tasklist 命令列出所有进程,筛选出 Java 进程并查找包含应用 JAR 文件名称的进程,提取其 PID 并使用 taskkill 杀掉进程。
    • 后续部分重新启动应用,将输出重定向到日志文件,并输出提示信息。

这些脚本可以检查应用是否正在运行,如果运行则杀掉进程并重新启动应用。根据实际情况,你可能需要调整 JVM 参数、应用名称和 JAR 文件路径等信息。


网站公告

今日签到

点亮在社区的每一天
去签到