欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

linux 系统的 jar 启动脚本

最编程 2024-10-19 07:22:20
...

编辑linux启动脚本

  执行 vi run_blog 按i 进入编辑,复制以下代码,并根据当前环境修改三个参数。以下是详细完整脚本代码:

#!/bin/bash

# 配置部分
JAR_PATH="/path/to/your/app.jar"             # 替换为你的 JAR 文件的实际路径
LOG_FILE="/var/log/app.log"                  # 日志文件路径
JAVA_OPTS="-Xms512m -Xmx1024m"               # Java 启动参数,可根据需要调整

# 获取应用的 PID
get_pid() {
    # 使用 pgrep 查找运行指定 JAR 的 Java 进程
    pgrep -f "java .* -jar $JAR_PATH"
}

# 启动函数
start() {
    PID=$(get_pid)
    if [ -n "$PID" ]; then
        echo "应用已在运行,PID=$PID"
        exit 1
    fi

    echo "启动应用..."
    nohup java $JAVA_OPTS -jar "$JAR_PATH" > "$LOG_FILE" 2>&1 &
    sleep 1  # 确保进程有时间启动
    PID=$(get_pid)
    if [ -n "$PID" ]; then
        echo "应用已启动,PID=$PID"
    else
        echo "启动失败,请检查日志文件:$LOG_FILE"
        exit 1
    fi
}

# 停止函数
stop() {
    PID=$(get_pid)
    if [ -z "$PID" ]; then
        echo "应用未运行"
        exit 1
    fi

    echo "停止应用,PID=$PID"
    kill $PID

    # 等待进程结束
    for i in {1..10}; do
        if ! ps -p $PID > /dev/null 2>&1; then
            break
        fi
        sleep 1
    done

    if ps -p $PID > /dev/null 2>&1; then
        echo "进程未正常停止,强制杀死进程"
        kill -9 $PID
    fi

    echo "应用已停止"
}

# 重启函数
restart() {
    stop
    start
}

# 状态检查函数
status() {
    PID=$(get_pid)
    if [ -n "$PID" ]; then
        echo "应用正在运行,PID=$PID"
        exit 0
    else
        echo "应用未运行"
        exit 1
    fi
}

# 主逻辑,根据传入的参数执行相应的函数
case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        restart
        ;;
    status)
        status
        ;;
    *)
        echo "用法: $0 {start|stop|restart|status}"
        exit 1
        ;;
esac
使用说明
  1. 配置脚本

    • 修改 JAR_PATH:将 /path/to/your/app.jar 替换为你的 JAR 文件的实际路径,例如 /home/user/myapp/app.jar
    • 修改 LOG_FILE:设置日志文件的路径,例如 /var/log/app.log
    • 调整 JAVA_OPTS:根据需要调整 Java 启动参数,例如内存设置等。
  2. 赋予执行权限

chmod +x app_control.sh

使用脚本

  • 启动应用

    ./run_blog.sh start
  • 停止应用

    ./run_blog.sh stop
  • 重启应用

    ./run_blog.sh restart
  • 检查应用状态

    ./run_blog.sh status
详细说明
  • 获取 PID

    脚本通过 pgrep -f "java .* -jar $JAR_PATH" 来查找运行指定 JAR 文件的 Java 进程。这种方法避免了使用 PID 文件,确保脚本能够准确定位到对应的进程。

  • 启动应用

    使用 nohup& 将应用在后台运行,并将输出重定向到指定的日志文件。启动后,脚本会等待一秒钟以确保进程已启动,并再次检查 PID。

  • 停止应用

    脚本首先查找应用的 PID,然后发送 SIGTERM 信号请求进程优雅退出。如果进程在 10 秒内未停止,脚本将发送 SIGKILL 信号强制终止进程。

  • 状态检查

    通过检查 PID 是否存在,判断应用是否正在运行,并输出相应的信息。

执行脚本如下图: 

 

自动启动(可选)

如果希望应用在系统启动时自动运行,可以将脚本添加到 systemd 服务中。以下是创建 systemd 服务单元文件的步骤:

  1. 创建服务单元文件

    创建一个 app.service 文件在 /etc/systemd/system/ 目录下:

    [Unit]
    Description=My Java Application
    After=network.target
    
    [Service]
    User=your_username
    ExecStart=/path/to/app_control.sh start
    ExecStop=/path/to/app_control.sh stop
    Restart=always
    
    [Install]
    WantedBy=multi-user.target
    

    注意

  •  将 your_username 替换为运行应用的实际用户名。
  • /path/to/app_control.sh 替换为脚本的实际路径。

启用并启动服务

sudo systemctl daemon-reload
sudo systemctl enable app.service
sudo systemctl start app.service
  1. 管理服务

    使用 systemctl 命令来管理应用:

    • 查看状态

      sudo systemctl status app.service
    • 停止服务

      sudo systemctl stop app.service
    • 重启服务

      sudo systemctl restart app.service

日志查看

应用的输出被重定向到指定的日志文件。你可以使用以下命令实时查看日志:

tail -f /var/log/app.log

注意事项

  • 权限问题:确保脚本和日志文件的路径对运行脚本的用户具有适当的读写权限。如果选择将日志文件存放在 /var/log,可能需要使用 sudo 或调整权限。
  • 唯一性:如果服务器上有多个相同 JAR 文件运行,pgrep 可能会匹配多个进程。确保 JAR_PATH 唯一,或者根据需要调整 pgrep 的匹配模式。
  • 安全性:确保脚本的执行权限和文件权限设置合理,避免未经授权的用户修改或执行脚本。