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

 nohup java -jar demo-0.0.1-SNAPSHOT.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
        ;;
esac
exit 0

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

chmod +x app.sh  

然后运行他,使用命令:

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

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

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

可以使用命令解决:

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

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

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

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

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

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

java -version

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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

这孩子叫逆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值