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

java--通用启动/停止shell脚本

脚本

#!/bin/bash# 定义超时时间(秒)
timeout=10# 检查命令参数
case "$1" instart|stop|restart|help)action="$1"jar_file="$2";;*)echo "Usage: $0 {start|stop|restart|help} [jar_file]"exit 1;;
esac# 定义 .jar 文件的路径
if [[ -z "$jar_file" ]]; then# 如果没有传入路径,则查找当前目录下的 .jar 文件jar_files=$(ls *.jar 2>/dev/null)# 检查是否找到了 .jar 文件if [[ -z "$jar_files" ]]; thenecho "No .jar file found in the current directory."exit 1fi# 检查是否找到了多个 .jar 文件if [[ $(echo "$jar_files" | wc -w) -gt 1 ]]; thenecho "Multiple .jar files found in the current directory, please specify one."exit 1fijar_file="$jar_files"
fi# 检查 .jar 文件名称是否以 .jar 结尾
if [[ ! "$jar_file" =~ \.jar$ ]]; thenecho "Error: The specified file '$jar_file' does not end with '.jar'."exit 1
fi# 获取 .jar 文件的绝对路径
absolute_path_jar_file=$(readlink -f "$jar_file")# 获取 Java 版本信息
java_version=$(java -version 2>&1 | awk 'NR==1{print $3}')# 定义启动命令
start_command="java -Xms128m -Xmx512m -jar $absolute_path_jar_file >/dev/null 2>&1 &"# 定义 start 函数
start() {# 检查进程是否已经在运行pid=$(pgrep -f "$absolute_path_jar_file")if [[ ! -z "$pid" ]]; thenecho "Process $absolute_path_jar_file is already running with PID $pid."return 1fi# 输出 Java 版本信息echo "Using Java version: $java_version"# 启动进程echo "Starting process $absolute_path_jar_file..."eval "$start_command"pid=$(pgrep -f "$absolute_path_jar_file")echo "Process $absolute_path_jar_file started successfully with PID $pid"
}# 定义 stop 函数
stop() {# 查找进程 IDpid=$(pgrep -f "$absolute_path_jar_file")if [[ -z "$pid" ]]; thenecho "No running processes found with name '$absolute_path_jar_file'."return 1fi# 发送 SIGTERM 信号echo "Sending SIGTERM to process $absolute_path_jar_file with PID $pid..."kill -15 "$pid"# 等待进程终止echo "Waiting for process $absolute_path_jar_file with PID $pid to terminate..."sleep "$timeout"# 检查进程是否已经终止if pgrep -f "$absolute_path_jar_file" > /dev/null 2>&1; then# 进程仍在运行,发送 SIGKILL 信号echo "Process $absolute_path_jar_file with PID $pid did not terminate within $timeout seconds. Sending SIGKILL..."kill -9 "$pid"elseecho "Process $absolute_path_jar_file with PID $pid terminated gracefully."fi
}# 根据命令执行相应操作
case "$action" instart)start;;stop)stop;;restart)stopstart;;help)echo "Usage: $0 {start|stop|restart|help} [jar_file]"exit 0;;*)echo "Usage: $0 {start|stop|restart|help} [jar_file]"exit 1;;
esac

使用方法

当前目录仅有1个jar文件时,两种方式都可以:
./service.sh start 
./service.sh stop
./service.sh restart./service.sh start demo.jar
./service.sh stop demo.jar
./service.sh restart demo.jar当前目录有多个jar文件时,必须指定jar:
./service.sh start demo.jar
./service.sh stop demo.jar
./service.sh restart demo.jar
http://www.lryc.cn/news/442028.html

相关文章:

  • Flutter-底部选择弹窗(showModalBottomSheet)
  • Linux——k8s认识
  • EC Shop安装指南 [ Apache PHP Mysql ]
  • 无线感知会议系列【3】【基于WiFi和4G/5G的非接触无线感知:挑战、理论和应用-1】
  • Virtuoso服务在centos中自动停止的原因分析及解决方案
  • 泽众P-One性能测试平台火焰图帮助定位产品性能问题
  • 数据结构修炼——顺序表和链表的区别与联系
  • AD9854 为什么输出波形幅度受限??
  • 在grafana上配置显示全部node资源信息概览
  • MySQL —— 索引
  • (已解决)vscode如何选择python解释器
  • sql刷题常用函数
  • Golang | Leetcode Golang题解之第417题太平洋大西洋水流问题
  • Acwing Hash表
  • 大健康裂变分销小程序开发
  • js取出一个对象中指定的字段(封装公共方法)
  • 【黑马点评】已解决java.lang.NullPointerException异常
  • 计算机专业的就业方向
  • VSCode C++ Tasks.json中的变量
  • 第一次安装Pytorch
  • Python数据分析-Steam 收入排名前 1500 的游戏
  • Android14请求动态申请存储权限
  • Doris:数据库建表最佳实践
  • Parallels Desktop 20(Mac虚拟机) v20.0.0 for Mac 最新破解版(支持M系列)
  • 【已解决】华为AR100-S路由器 恢复出厂后,找不到5G wifi的设置
  • 【MongoDB】--MongoDB批量操作
  • 数据库常规操作
  • 基于STM32设计的水渠闸门远程控制系统(华为云IOT)(226)
  • 鸿蒙开发(NEXT/API 12)【响应校验】远场通信服务
  • 2024最新!!!iOS高级面试题,全!(二)