在开发和运维过程中,我们经常需要启动、停止、重启或检查 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

如何使用脚本

  1. 保存脚本:将上述代码保存为一个文件,例如 manage_app.sh

  2. 添加执行权限:在命令行中,使用 chmod +x manage_app.sh 命令为脚本添加执行权限。

  3. 运行脚本:使用 ./manage_app.sh 命令后跟一个参数(startstoprestartstatus)来执行相应的操作。例如,要启动应用,可以运行 ./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 命令中的重定向部分。