Linux 使用bash文件以守护进程运行java -jar

想要保证后台运行java -jar,可以使用 Bash 脚本来启动一个 Java 应用程序作为后台守护进程

首先创建一个shell脚本,可以自己定义放在虚拟机的某个文档中,我放在了opt目录下,这个目录可以自己定义,起名为 app.sh

里面的内容如下:26行

nohup java -jar demo-0.0.1-SNAPSHOT.jar >> "$LOG_FILE" 2>&1 &

部分注意更改自己的jar包名

# 定义工作目录WORK_DIR="/opt"# 定义日志文件路径LOG_FILE="$WORK_DIR/myapp.log"# 定义 PID 文件路径,这个是起了个进程号PID_FILE="$WORK_DIR/myapp.pid"# 创建工作目录和日志文件夹(如果不存在)mkdir -p "$WORK_DIR"# 检查应用程序是否已经在运行is_running() {    local pid_file=$1    if [ -f "$pid_file" ]; then        local pid=$(cat "$pid_file")        if ps -p $pid > /dev/null 2>&1; then            return 0 # 进程存在        fi    fi    return 1 # 进程不存在}# 启动 Java 应用start_app() {    if is_running "$PID_FILE"; then        echo "应用程序已在运行"    else        cd "$WORK_DIR"        nohup java -jar demo-0.0.1-SNAPSHOT.jar >> "$LOG_FILE" 2>&1 &         local new_pid=$!        echo $new_pid > "$PID_FILE"        echo "应用程序开始运行 PID: $new_pid"    fi}# 停止 Java 应用stop_app() {    if is_running "$PID_FILE"; then        local pid=$(cat "$PID_FILE")        kill $pid        while ps -p $pid > /dev/null; do sleep 1; done        rm "$PID_FILE"        echo "应用程序已停止"    else        echo "应用程序未运行"    fi}case "$1" in    start)        start_app        ;;    stop)        stop_app        ;;    restart)        stop_app        start_app        ;;    *)        echo "Usage: $0 {start|stop|restart}"        exit 1        ;;esacexit 0

Bash

然后先给他一个权限,使用命令:

chmod +x app.sh  

Bash

然后运行他,使用命令:

./app.sh start     //运行命令./app.sh stop      //停止命令./app.sh restart   //重启命令

Plain Text

如果运行后出现以下错误,是说明app.sh里面有一些空格

./app.sh:行10: 未预期的符号“$'{\r'”附近有语法错误'/app.sh:行10: `is_running() {

Bash

可以使用命令解决:

sed 's/\r$//' < app.sh > app_fixed.sh    //读取app.sh文件,去除每行末尾的 \r 字符,并将结果保存到 app_fixed.sh 文件中,保存为另一个文件是为了防止里面数据误删mv app_fixed.sh app.sh   //这个命令就是把上面的命令保存的文件再重命名为app.sh

Bash

然后重新启动就行了,可以在日志文件中查看运行日志

如果运行日志中报下面错误

nohup: 无法运行命令 'java': No such file or directory

Bash

这是因为虚拟机中没有安装JDK

先用命令检查一下是否安装

java -version

Bash

如果没有的话,可以下载一个JDK,使用命令

dnf search openjdk     //查找可用的JDK版本,根据自己的项目下载sudo dnf install java-1.8.0-openjdk    //安装JDK,根据自己所需要的JDK,更改1.8.0部分

Bash

然后就直接重新运行就好了,下面是运行日志

我用的是之前的仓储管理系统,前端的URL改成虚拟机的地址就行了,然后运行,这个日志文件不是实时更新的,需要重新打开才能看到最新的日志

上一篇:驱动开发系列22 - 调试 mesa 中的 glDrawArrays 的实现


下一篇:《Attention Is All You Need》论文翻译-1. 介绍