当前位置: 首页 > article >正文

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改成虚拟机的地址就行了,然后运行,这个日志文件不是实时更新的,需要重新打开才能看到最新的日志


http://www.kler.cn/news/362534.html

相关文章:

  • 【设计模式系列】命令模式
  • mysql学习教程,从入门到精通,sql序列使用(45)
  • 探索MySQL数据库的高级功能:迈向高效数据管理的深度之旅
  • centOS部署Jenkins实现项目可持续自动化部署
  • vue全局API(app.component,app.config,app.directive,app.mount,app.unMount,app.use)
  • 如何看待AI技术的应用前景?
  • 如何在不使用 VPN 的情况下通过 SOCKS 隧道安全地路由 Web 流量
  • w~自动驾驶合集6
  • 高阶函数中的reduce,reduceleft,fold
  • 【网络安全】从2FA绕过到账户接管
  • python3的基本数据类型:String(字符串)
  • 【Nuvoton干货分享】开发应用篇 4 -- 8bit MCU Flash 操作
  • Python 实现 excel 数据过滤
  • day01|计算机网络重难点之TCP/IP模型和OSI模型的区别、从输入 URL 到页面展示
  • JMeter模拟并发请求
  • 【Java】揭秘网络编程:深入探索其无尽奥秘与魅力
  • Kotlin 入门教程:函数
  • Detecting Holes in Point Set Surfaces 论文阅读
  • 面对对象抽象类与普通类的区别
  • 初识js-cnblog
  • 接口测试(六)jmeter——参数化(配置元件 --> 用户定义的变量)
  • 【LeetCode】每日一题 2024_10_18 使二进制数组全部等于 1 的最少操作次数 I(贪心)
  • 6-2.Android 对话框之基础对话框问题清单(UI 线程问题、外部取消、冲突问题、dismiss 方法与 hide 方法)
  • 【单元测试】深入解剖单元测试的思维逻辑
  • Nextjs Tailwind CSS 下载和配置
  • 027 elasticsearch查询数据-Java原生客户端