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

若依jar包运行脚本,从零到一:用Bash脚本实现JAR应用的启动、停止与监控

 

脚本使用说明

  1. 启动应用sh app.sh start
  2. 停止应用sh app.sh stop
  3. 检查应用状态sh app.sh status
  4. 重启应用sh app.sh restart

注意事项

  • 请确保你的系统上安装了 Java 环境,并且 ruoyi-admin.jar 文件存在于脚本可以访问的路径中。
  • 脚本中使用了 lsof 命令来检查端口占用情况,但这是一个拼写错误。通常,我们使用 lsofnetstatss 命令来实现这个功能。你需要根据系统环境替换正确的命令。
  • 脚本中的 nohup 也是拼写错误,正确的应该是 nohup
  • nobup.log 文件用于记录应用启动时的输出,请确保脚本对该文件有写入权限。
#!/bin/bash  
APP_NAME=ruoyi-admin.jar  
PORT=9021  # 假设你的应用绑定到这个端口  usage() {  echo "Usage: sh app.sh [start|stop|restart|status]"  exit 1  
}  is_exist(){  pid=$(lsof -t -i :$PORT)  # 使用lsof命令查找使用指定端口的PID  if [ -z "$pid" ]; then  return 1  else  return 0  fi  
}  start(){  is_exist  if [ $? -eq 0 ]; then  echo "${APP_NAME} is already running on port $PORT."  else  # nohup java -Xms256m -Xmx512m -jar $APP_NAME > /dev/null 2>&1 &  nohup java -Xms256m -Xmx512m -jar $APP_NAME >nobup.log 2>&1 & fi  
}  stop(){  is_exist  if [ $? -eq 0 ]; then  kill -9 $pid  # 关闭找到的进程  echo "Stopped ${APP_NAME} running on port $PORT."  else  echo "${APP_NAME} is not running on port $PORT."  fi  
}  status(){  is_exist  if [ $? -eq 0 ]; then  echo "${APP_NAME} is running on port $PORT. Pid is $pid"  else  echo "${APP_NAME} is NOT running on port $PORT."  fi  
}  restart(){  stop  start  
}  case "$1" in  "start")  start  ;;  "stop")  stop  ;;  "status")  status  ;;  "restart")  restart  ;;  *)  usage  ;;  
esac

AI注释版

#!/bin/bash  
# 声明应用的名称和使用的端口号  
APP_NAME=ruoyi-admin.jar  
PORT=9021  # 假设应用绑定到这个端口  # 使用函数来显示脚本的使用方式,并退出脚本  
usage() {  echo "Usage: sh app.sh [start|stop|restart|status]"  exit 1  
}  # 检查应用是否已经在运行  
is_exist(){  # 使用 lsof 命令查找使用指定端口的进程ID,这里应该是 lsof 的拼写错误,应为 lsof 或 lsof 的替代品如 netstat、ss  pid=$(lsof -t -i :$PORT)  if [ -z "$pid" ]; then  # 如果 pid 为空,表示没有找到对应的进程,返回 1  return 1  else  # 如果找到了进程,返回 0  return 0  fi  
}  # 启动应用的函数  
start(){  # 检查应用是否已经在运行  is_exist  if [ $? -eq 0 ]; then  # 如果应用已经在运行,则输出提示信息  echo "${APP_NAME} is already running on port $PORT."  else  # 如果应用没有运行,则启动应用,并将输出重定向到 nobup.log 文件  # 注意:nohup 应该是 nohup 的拼写错误  nohup java -Xms256m -Xmx512m -jar $APP_NAME >nobup.log 2>&1 &  fi  
}  # 停止应用的函数  
stop(){  # 检查应用是否在运行  is_exist  if [ $? -eq 0 ]; then  # 如果应用在运行,则强制终止该进程  kill -9 $pid  # 输出停止应用的提示信息  echo "Stopped ${APP_NAME} running on port $PORT."  else  # 如果应用没有运行,则输出提示信息  echo "${APP_NAME} is not running on port $PORT."  fi  
}  # 检查应用状态的函数  
status(){  # 检查应用是否在运行  is_exist  if [ $? -eq 0 ]; then  # 如果应用在运行,则输出应用的运行状态和进程ID  echo "${APP_NAME} is running on port $PORT. Pid is $pid"  else  # 如果应用没有运行,则输出提示信息  echo "${APP_NAME} is NOT running on port $PORT."  fi  
}  # 重启应用的函数  
restart(){  # 停止应用  stop  # 启动应用  start  
}  # 根据传入的参数执行相应的操作  
case "$1" in  "start")  start  # 启动应用  ;;  "stop")  stop  # 停止应用  ;;  "status")  status  # 检查应用状态  ;;  "restart")  restart  # 重启应用  ;;  *)  usage  # 如果参数不正确,则显示使用方式  ;;  
esac

http://www.lryc.cn/news/321435.html

相关文章:

  • Unix运维_FreeBSD-13.1临时环境变量设置(bin和include以及lib)
  • Apache Dolphinscheduler - 无需重启 Master-Server 停止疯狂刷日志解决方案
  • 竞争优势:大型语言模型 (LLM) 如何重新定义业务策略
  • Spring AOP和AspectJ AOP区别
  • FREERTOS信号量详解
  • 每天学习一个Linux命令之vim
  • linux环境部署
  • 上位机图像处理和嵌入式模块部署(qmacvisual图像预处理)
  • C语言内存函数详解
  • 详解Redis的持久化RDB和AOF
  • 详细分析Js中的Promise.all基本知识(附Demo)
  • const,static深度总结——c++穿透式分析
  • 快速搭建一个一元二次方程flask应用
  • O2OA红头文件流转与O2OA版式公文编辑器基本使用
  • 软件测试:C++ Google Test单元测试框架GTest
  • 大数据面试题 —— HBase
  • SCI一区 | Matlab实现GWO-TCN-BiGRU-Attention灰狼算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测
  • SpringMVC的执行原理
  • Qt + HTTP 线程交互类封装
  • GitHub Copilot+ESP开发实战-串口
  • C# 使用ffmpeg将图片保存为mp4视频
  • Java安全技术及代码审计技巧
  • C# 使用OpenCvSharp4将Bitmap合成为MP4视频的环境
  • [游戏开发][Unity] 导出Xcode工程,完成调试与发布
  • JSONP 实现跨域请求案例
  • 2024年智慧城市、人文发展与区域经济国际会议(ICSCCDRE 2024)
  • 目标检测——PP-YOLO算法解读
  • 多特征变量序列预测(11) 基于Pytorch的TCN-GRU预测模型
  • Lvs+keepalived+nginx搭建高可用负载均衡集群
  • WPF —— 控件模版和数据模版