linux系统之jar启动脚本

编辑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" ]; thenecho "应用已在运行,PID=$PID"exit 1fiecho "启动应用..."nohup java $JAVA_OPTS -jar "$JAR_PATH" > "$LOG_FILE" 2>&1 &sleep 1  # 确保进程有时间启动PID=$(get_pid)if [ -n "$PID" ]; thenecho "应用已启动,PID=$PID"elseecho "启动失败,请检查日志文件:$LOG_FILE"exit 1fi
}# 停止函数
stop() {PID=$(get_pid)if [ -z "$PID" ]; thenecho "应用未运行"exit 1fiecho "停止应用,PID=$PID"kill $PID# 等待进程结束for i in {1..10}; doif ! ps -p $PID > /dev/null 2>&1; thenbreakfisleep 1doneif ps -p $PID > /dev/null 2>&1; thenecho "进程未正常停止,强制杀死进程"kill -9 $PIDfiecho "应用已停止"
}# 重启函数
restart() {stopstart
}# 状态检查函数
status() {PID=$(get_pid)if [ -n "$PID" ]; thenecho "应用正在运行,PID=$PID"exit 0elseecho "应用未运行"exit 1fi
}# 主逻辑,根据传入的参数执行相应的函数
case "$1" instart)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 的匹配模式。
  • 安全性:确保脚本的执行权限和文件权限设置合理,避免未经授权的用户修改或执行脚本。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/57047.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Gin框架操作指南07:路由与中间件

官方文档地址(中文):https://gin-gonic.com/zh-cn/docs/ 注:本教程采用工作区机制,所以一个项目下载了Gin框架,其余项目就无需重复下载,想了解的读者可阅读第一节:Gin操作指南&#…

【JVM】内存模型

文章目录 内存模型的基本概念案例 程序计数器栈Java虚拟机栈局部变量表栈帧中局部变量表的实际状态栈帧中存放的数据有哪些 操作数栈帧数据 本地方法栈 堆堆空间是如何进行管理的? 方法区静态变量存储 直接内存直接内存的作用 内存模型的基本概念 在前面的学习中,我们知道了字…

Java 8 Stream API:从基础到高级,掌握流处理的艺术

一、Stream(流)基本介绍 Java 8 API 添加了一个新的抽象称为Stream(流),可以让你以一种声明的方式处理数据,这种风格将要处理的元素集合看做一种流,元素流在管道中传输,并在管道中间…

云黑系统全解无后门 +搭建教程

这套系统呢是玖逸之前南逸写的一套云黑系统,功能带有卡密生成和添加黑名单等,源码放在我的网盘里已经两年之久,由于玖逸现在已经跑路了所以现在发出来分享给大家,需要的可以自己拿去而开,反正功能也不是很多具体的自己…

电脑视频剪辑大比拼,谁更胜一筹?

随着短视频的火爆,越来越多的人开始尝试自己动手制作视频,无论是记录生活点滴还是创作个性短片,一款好用的视频剪辑软件是必不可少的。今天,我们就从短视频运营的角度,来聊聊几款热门的电脑视频剪辑软件,看…

docker配置加速器

阿里云 控制台》容器镜像服务》镜像工具》镜像加速器 复制地址:https://ywtoq7bz.mirror.aliyuncs.com 到:etc/docker下:vi daemon.json 格式: { "registry-mirrors": ["加速器地址"] } 注&#xff1…

JavaScript:闭包、防抖与节流

一,闭包 1,什么是闭包 闭包是指一个函数和其周围的词法环境(lexical environment)的组合。 换句话说,闭包允许一个函数访问并操作函数外部的变量。 闭包的核心特性: 函数内部可以访问外部函数的变量即使外部函数已经返回,内部…

一款新开源跨平台的.NET Word(docx)模版导出引擎,完美支持Linux和Mac操作系统(附源码)

前言 在数字化办公日益盛行的今天,文档处理成为了我们日常工作不可或缺的一部分。然而,许多传统的文档处理工具都依赖于特定的操作系统和复杂的组件安装,这无疑给跨平台办公带来了诸多不便。为了解决这一问题,我们找到了一个新的…

【MR开发】在Pico设备上接入MRTK3(一)——在Unity工程中导入MRTK3依赖

写在前面的话 在Pico上接入MRTK3,目前已有大佬开源。 https://github.com/Phantomxm2021/PicoMRTK3 也有值得推荐的文章。 MRTK3在PICO4上的使用小结 但由于在MacOS上使用MRTK3,无法通过Mixed Reality Feature Tool工具管理MRTK3安装包。 故记录一下…

◇【论文_20151120_20160405v3】Dueling Network 决斗〔Google DeepMind〕

整理代码:Dueling_DQN__Pendulum_v1.ipynb https://arxiv.org/abs/1511.06581 Dueling Network Architectures for Deep Reinforcement Learning 文章目录 摘要1. 引言1.1. 相关工作 2. 背景2.1. Deep Q-networks 【DQN】2.2. Double Deep Q-networks 【DDQN】2.3…

OpenCV高级图形用户界面(13)选择图像中的一个矩形区域的函数selectROI()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 允许用户在给定的图像上选择一个感兴趣区域(ROI)。 该功能创建一个窗口,并允许用户使用鼠标来选择一个 ROI。…

其他css的用途

1.animation-fill-mode: backwards; //避免了在动画开始前元素的突然显现,动画必要。 2.用rem响应式字体大小,可以在html样式定义font-size?(例10px,62.5%(100%是16px))。然后样式就可以用rem代替px。 3.color: transparent;: 这行代码将文…

计算生物学与生物信息学漫谈-2-测序深度/读长质量和Fasta处理

上一篇文章中我们介绍了测序技术的由来与发展,那么在介绍第三代测序的时候,我们提到了关于测序深度和读长的问题,那么本篇文章就详解介绍一下。 计算生物学与生物信息学漫谈-1-测序一路走来-CSDN博客 目录 1.测序深度SEQUENCING DEPTH &…

《AI生成式工具使用》之:自助生成视频

目录 背景说明及目标: 实现过程: 1、有问题找度娘 2、利用剪映AI生成视频具体步骤 剪映AI感受 3、利用万彩AI生成视频具体步骤 万彩AI感受 4、利用腾讯云剪生成视频具体步骤 腾讯云剪感受 最终结论: 关注我,躺不平就一起…

【部署篇】RabbitMq-02单机模式部署

RabbitMQ和Erlang/OTP兼容性矩阵 下表提供了当前支持的RabbitMQ版本系列的Erlang兼容性矩阵。更多RabbitMQ版本,请参阅官网的系列兼容性列表。官网地址:https://www.rabbitmq.com/docs/which-erlang RabbitMQ版本最小支持版本最大支持版本备注 4.0.24.…

Axure重要元件三——中继器添加数据

亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢! 本节课:中继器添加数据 课程内容:添加数据项、自动添加序号、自动添加数据汇总 应用场景:表单数据的添加 案例展示: 步骤…

经验是最坏的老师

奥斯卡.王尔德说过:经验是最坏的老师。他经常先考试,然后再给出指导。 这让我想起了另外一句话:愚笨的人,往往都在犯同样的错误;普通的人,从自己的错误中学习;聪明人从别人的错误中学习。 如果…

Linux 防火墙的开启、关闭、禁用命令

Linux 防火墙的开启、关闭、禁用命令 文章目录 Linux 防火墙的开启、关闭、禁用命令1.设置开机启用防火墙2.设置开机禁用防火墙3.启动防火墙4.关闭防火墙5.检查防火墙状态 1.设置开机启用防火墙 systemctl enable firewalld.service2.设置开机禁用防火墙 systemctl disable f…

006、链表分割

0、题目描述 链表分割 这道题的思路,遍历原链表,小于x的放到一个链表里,大于x的放到另一个链表里。然后把两个链表接起来。 建立的两个新链表都是有哨兵位的,也就是有头结点,排序结束后要free两个头结点。 1、法1 还…

CSS3 提示框带边角popover

CSS3 提示框带边角popover。因为需要绝对定位子元素&#xff08;这里就是伪元素&#xff09;&#xff0c;所以需要将其设置为相对对位 <!DOCTYPE html> <html> <head> <title>test1.html</title> <meta name"keywords" con…