Shell脚本管理Java程序的实现示例

Written by

in

文章目录
  • 在开发和部署 Java 程序时,通常需要进行一些重复性操作,如启动、停止、查看状态以及重启程序。手动执行这些操作往往麻烦且容易出错,而通过 Shell 脚本,可以将这些操作封装为简单的命令行调用。 例如,假设每次部署后需要启动应用,并查看是否正常运行。Shell 脚本可以帮助我们实现: 自动启动程序并将输出重定向到日志文件中。 检查程序是否已经在运行,避免重复启动。 停止正在运行的程序,确保优雅关闭。 定期重启程序,保持应用的健康状态。 使用 Shell 脚本可以提高操作的自动化和可靠性,尤其是在自动化部署、CI/CD 管道中,能够大大简化运维工作。
  • 加入日志清理 可以在脚本中加入日志清理功能,在程序启动或重启时,将旧的日志文件重命名并保存,以便后续查看: [ -f “$LOG_FILE” ] && mv $LOG_FILE “$LOG_FILE.$(date +%Y%m%d%H%M%S)” 支持自定义参数 可以通过传入命令行参数来动态指定 JAR 文件名或 JVM 参数。例如: APP_NAME=${2:-“myapp-1.0.jar”} 启动失败检测 启动程序后,可以检测程序是否成功启动。如果程序未启动成功,可以输出错误信息并退出: if ! ps -p $(cat $PID_FILE) > /dev/null; then echo “启动失败!” rm -f $PID_FILE exit 1 fi 到此这篇关于Shell 脚本管理 Java 程序的实现示例的文章就介绍到这了,更多相关Shell 脚本管理Java 程序内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: Shell脚本管理Java应用程序的高效方法 Linux中使用shell脚本管理Java应用程序
  • 目录
    • 一、为什么要用 Shell 脚本?
    • 二、Shell 脚本的基础知识
      • 1. 基本结构
      • 2. 常用命令
    • 三、Shell 脚本示例分析
      • 完整脚本
      • 脚本详解
        • 1. 变量配置
        • 2.start部分
        • 3.stop部分
        • 4.status部分
        • 5.restart部分
        • 6. 默认提示
    • 四、脚本的使用方法
      • 1. 创建脚本
        • 2. 赋予执行权限
          • 3. 运行脚本
          • 五、补充:增强功能

            在开发和部署 Java 程序时,通常需要进行一些重复性操作,如启动、停止、查看状态以及重启程序。手动执行这些操作往往麻烦且容易出错,而通过 Shell 脚本,可以将这些操作封装为简单的命令行调用。

            例如,假设每次部署后需要启动应用,并查看是否正常运行。Shell 脚本可以帮助我们实现:

            • 自动启动程序并将输出重定向到日志文件中。
            • 检查程序是否已经在运行,避免重复启动。
            • 停止正在运行的程序,确保优雅关闭。
            • 定期重启程序,保持应用的健康状态。

            使用 Shell 脚本可以提高操作的自动化和可靠性,尤其是在自动化部署、CI/CD 管道中,能够大大简化运维工作。

            Shell 脚本是一个包含一系列命令的文本文件,文件的第一行通常指定解释器。最常见的解释器是 bash,通过 #!/bin/bash 来指定,表示后续的命令使用 bash 解释器来执行。

            #!/bin/bash
            

            • echo:将文本输出到终端。
            • ps:列出系统中运行的进程。
            • kill:结束指定的进程。
            • nohup:忽略挂起信号(让程序在后台运行,保持程序在会话关闭后仍然继续运行)。
            • case … in … esac:条件语句,用于根据传入的参数选择不同的操作。

            #!/bin/bash
            
            # 配置部分
            APP_NAME="myapp-1.0.jar"  # 程序的 JAR 包名称
            LOG_FILE="app.log"        # 日志文件
            PID_FILE="app.pid"        # PID 文件,用于存储程序的进程 ID
            
            # 脚本的主逻辑
            case "$1" in
                start)
                    # 检查是否已经运行
                    if [ -f "$PID_FILE" ]; then
                        echo "程序已运行,PID=$(cat $PID_FILE)"
                        exit 1
                    fi
            
                    # 后台启动程序
                    echo "正在启动程序..."
                    nohup java -jar $APP_NAME > $LOG_FILE 2>&1 &
                    echo $! > $PID_FILE
                    echo "程序已启动,PID=$(cat $PID_FILE)"
                    ;;
            
                stop)
                    # 检查是否有运行中的程序
                    if [ -f "$PID_FILE" ]; then
                        echo "正在停止程序,PID=$(cat $PID_FILE)..."
                        kill $(cat $PID_FILE)
                        rm -f $PID_FILE
                        echo "程序已停止"
                    else
                        echo "未找到运行中的程序"
                    fi
                    ;;
            
                restart)
                    # 重启程序
                    $0 stop
                    $0 start
                    ;;
            
                status)
                    # 检查程序状态
                    if [ -f "$PID_FILE" ]; then
                        echo "程序正在运行,PID=$(cat $PID_FILE)"
                    else
                        echo "程序未运行"
                    fi
                    ;;
            
                *)
                    # 提示用法
                    echo "用法: $0 {start|stop|restart|status}"
                    exit 1
                    ;;
            esac
            

            APP_NAME="myapp-1.0.jar"
            LOG_FILE="app.log"
            PID_FILE="app.pid"
            
            • APP_NAME:指定要运行的 Java 程序的 JAR 文件名。
            • LOG_FILE:日志文件,用于输出程序的标准输出和错误输出。
            • PID_FILE:保存程序的进程 ID,用于停止或查看程序的状态。

            if [ -f "$PID_FILE" ]; then
                echo "程序已运行,PID=$(cat $PID_FILE)"
                exit 1
            fi
            
            nohup java -jar $APP_NAME > $LOG_FILE 2>&1 &
            echo $! > $PID_FILE
            echo "程序已启动,PID=$(cat $PID_FILE)"
            
            • 检查是否正在运行:通过检查 $PID_FILE 是否存在来判断程序是否已经启动。如果文件存在,说明程序已在运行,避免重复启动。
            • 启动程序:使用 nohup 命令在后台运行 Java 程序,并将程序的标准输出和错误输出重定向到 $LOG_FILE$! 获取最近启动的进程的 PID,并将其存入 $PID_FILE 中。

            if [ -f "$PID_FILE" ]; then
                kill $(cat $PID_FILE)
                rm -f $PID_FILE
                echo "程序已停止"
            else
                echo "未找到运行中的程序"
            fi
            
            • 检查程序是否运行:通过 $PID_FILE 判断程序是否在运行。如果运行,则发送 kill 信号停止程序,并删除 PID 文件。

            if [ -f "$PID_FILE" ]; then
                echo "程序正在运行,PID=$(cat $PID_FILE)"
            else
                echo "程序未运行"
            fi
            
            • 通过检查 $PID_FILE 是否存在来判断程序是否正在运行,并显示当前进程的 PID。

            $0 stop
            $0 start
            
            • restart 通过调用脚本自身的 stopstart 操作来重启程序。$0 表示脚本本身。

            echo "用法: $0 {start|stop|restart|status}"
            
            • 如果脚本传入了不正确的参数,输出如何使用脚本的提示信息。

            将脚本内容保存为 app.sh 文件。

            chmod +x app.sh
            

            • 启动程序:

              ./app.sh start
              
            • 停止程序:

              ./app.sh stop
              
            • 查看程序状态:

              ./app.sh status
              
            • 重启程序:

              ./app.sh restart
              

            1. 加入日志清理

            可以在脚本中加入日志清理功能,在程序启动或重启时,将旧的日志文件重命名并保存,以便后续查看:

            [ -f "$LOG_FILE" ] && mv $LOG_FILE "$LOG_FILE.$(date +%Y%m%d%H%M%S)"
            
            1. 支持自定义参数

            可以通过传入命令行参数来动态指定 JAR 文件名或 JVM 参数。例如:

            APP_NAME=${2:-"myapp-1.0.jar"}
            
            1. 启动失败检测

            启动程序后,可以检测程序是否成功启动。如果程序未启动成功,可以输出错误信息并退出:

            if ! ps -p $(cat $PID_FILE) > /dev/null; then
                echo "启动失败!"
                rm -f $PID_FILE
                exit 1
            fi
            

            到此这篇关于Shell 脚本管理 Java 程序的实现示例的文章就介绍到这了,更多相关Shell 脚本管理Java 程序内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

            您可能感兴趣的文章:

            • Shell脚本管理Java应用程序的高效方法
            • Linux中使用shell脚本管理Java应用程序

            站内搜索