目录
比如程序叫: 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 参数、日志管理功能等。
如果有进程 杀掉,重启
- 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。
- 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 文件路径等信息。