使用 Bash 脚本管理 Java 应用:从启动到停止
在开发和运维过程中,我们经常需要启动、停止、重启或检查 Java 应用程序的运行状态。手动执行这些操作可能会很繁琐,特别是在需要频繁管理多个应用时。为了简化这些任务,我们可以编写一个 Bash 脚本来自动化这些过程。下面是一个示例脚本,用于管理一个名为 permission.jar
的 Java 应用。
脚本内容
首先,我们需要一个 Bash 脚本。这个脚本将包含启动、停止、重启和检查应用状态的功能。
#!/bin/bash
# 这里可替换为你自己的执行程序,其他代码无需更改
APP_NAME=permission.jar
# 使用说明
usage() {
echo "Usage: sh 脚本名.sh [start|stop|restart|status]"
exit 1
}
# 检查程序是否在运行
is_exist(){
pid=$(ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}')
if [ -z "${pid}" ]; then
return 1
else
return 0
fi
}
# 启动方法
start(){
is_exist
if [ $? -eq 0 ]; then
echo "${APP_NAME} is already running. pid=${pid} ."
else
nohup java -Xms512m -Xmx1g -jar -Xdebug -Xrunjdwp:transport=dt_socket,address=7004,server=y,suspend=n $PWD/$APP_NAME --spring.profiles.active=yx --server.port=8082 > nohup.log 2>&1 &
echo "${APP_NAME} start success"
fi
}
# 停止方法
stop(){
is_exist
if [ $? -eq 0 ]; then
kill -9 $pid
else
echo "${APP_NAME} is not running"
fi
}
# 输出运行状态
status(){
is_exist
if [ $? -eq 0 ]; then
echo "${APP_NAME} is running. Pid is ${pid}"
else
echo "${APP_NAME} is NOT running."
fi
}
# 重启
restart(){
stop
sleep 3
start
}
# 根据输入参数执行对应方法
case "$1" in
"start")
start
;;
"stop")
stop
;;
"status")
status
;;
"restart")
restart
;;
*)
usage
;;
esac
如何使用脚本
保存脚本:将上述代码保存为一个文件,例如
manage_app.sh
。添加执行权限:在命令行中,使用
chmod +x manage_app.sh
命令为脚本添加执行权限。运行脚本:使用
./manage_app.sh
命令后跟一个参数(start
、stop
、restart
或status
)来执行相应的操作。例如,要启动应用,可以运行./manage_app.sh start
。
脚本功能详解
is_exist:检查
permission.jar
是否正在运行,如果是,则返回其 PID;否则返回 1。start:如果应用未运行,则使用
nohup
命令在后台启动它,并记录日志到nohup.log
文件。stop:如果应用正在运行,则使用
kill -9
命令强制停止它。status:显示应用的运行状态和 PID(如果正在运行)。
restart:先停止应用,等待 3 秒后重新启动它。
注意事项
脚本中的
APP_NAME
变量应设置为你想要管理的 Java 应用的 JAR 文件名。你可以根据需要调整 JVM 参数(如
-Xms512m
和-Xmx1g
)和 Java 应用参数(如--spring.profiles.active=yx
和--server.port=8082
)。使用
kill -9
强制停止应用可能会导致数据丢失或不一致,因此请谨慎使用。在可能的情况下,最好先尝试使用kill
命令(不带-9
选项)来优雅地停止应用。如果你想要将日志输出到不同的文件或位置,可以修改
nohup
命令中的重定向部分。