shell脚本重启Jar服务

一、简要概述

centos系统某目录下,保存有zipkin-server-2.10.4-exec.jar,现希望实现: 通过脚本,重启此jar

二、脚本实现

kill-jar.sh

#!/bin/bash
ps -ef | grep java | grep zipkin-server-2.10.4-exec.jar
ps -ef | grep java | grep zipkin-server-2.10.4-exec.jar | awk '{print $2}'
ps -ef | grep java | grep zipkin-server-2.10.4-exec.jar | awk '{print $2}' | xargs kill -9

reload-jar.sh

#!/bin/bash
# get pid

pname="zipkin-server-2.10.4-exec.jar"
echo  -e  "jar-name=$pname\r\n"


get_pid(){
 pid=`ps -ef | grep $pname | grep -v grep | awk '{print $2}'`
 echo "$pid"
}

ps -ef|grep $pname

PID=$(get_pid)
if [ -z "${PID}" ] 
then
 echo -e "\r\nJava Application already stop!"
else
 echo -e '\r\nkill -9  '${PID} '\r\n'
 kill -9 ${PID}
 echo -e "Java Application is stop!"
fi

rm -rf info.log

echo -e "\r\nJava Application will startup!\r\n"
jar_path=`find . -maxdepth 1 -name $pname`

#echo "jarfile=$jar_path"

nohup java -jar $jar_path >>./info.log 2>&1 &

ps -ef|grep $pname

jps -m -l
<think>好的,用户想通过shell脚本来运行JAR文件,需要示例代码和方法。我得先回忆一下之前看到的引用内容,里面有多个关于启动、停止、重启JAR脚本示例。比如引用[2]和引用[3]都提供了详细的脚本结构,括启动、停止、重启等功能。用户可能希望一个完整的脚本,可以处理不同的命令参数,比如start、stop、restart等,并且需要检查程序是否已经在运行。 首先,我需要确保脚本的基本结构正确。通常以#!/bin/bash开头,然后定义变量,比如JAR_NAME,设置加载路径和配置文件路径。然后定义各种函数,如is_exist检查进程是否存在,start、stop、restart等函数。最后用case语句根据输入参数调用对应的函数。 需要注意的是,不同的示例中可能有些差异,比如引用[2]中使用了LOAD_PATH和CONFIG_PATH,而引用[3]则更简化。用户可能需要根据实际情况调整这些参数,比如是否需要指定类加载路径或外部配置文件。 另外,日志的处理也很重要。引用[2]中将输出重定向到指定日志文件,而引用[3]则是重定向到/dev/null,可能用户需要选择适合的方式。同时,权限问题也需要提及,比如使用chmod +x来添加执行权限。 用户可能还关心如何调试脚本,比如使用set命令开启调试模式,如引用[1]提到的。这部分虽然用户没有直接问,但作为补充信息可能会有帮助。 总结步骤应该是:1.创建脚本文件,2.编写脚本内容,3.添加执行权限,4.运行脚本。同时提供示例代码,并解释各部分的作用,比如如何替换JAR名称,配置路径等。最后提醒调试方法和常见问题,比如进程检测是否正确,权限问题等。</think>### 如何通过Shell脚本执行JAR文件 #### 一、基础Shell脚本示例 以下是一个完整的Shell脚本模板,支持`启动/停止/重启/状态查询`操作,并含配置文件、日志管理和进程检测功能: ```shell #!/bin/bash # 替换为你的JAR名称 JAR_NAME="your-app.jar" # 自定义配置(可选) LOAD_PATH="-Dloader.path=/path/to/libs" # 外部依赖目录 CONFIG_PATH="--spring.config.location=/path/to/application.yml" # 配置文件路径 LOG_FILE="/path/to/app.log" # 日志输出路径 # 检查进程是否存在 is_exist() { pid=$(ps -ef | grep "$JAR_NAME" | grep -v grep | awk '{print $2}') if [ -z "${pid}" ]; then return 1 # 不存在 else return 0 # 存在 fi } # 启动函数 start() { is_exist if [ $? -eq 0 ]; then echo "[INFO] $JAR_NAME is already running. PID: ${pid}" else nohup java $LOAD_PATH -jar $JAR_NAME $CONFIG_PATH > $LOG_FILE 2>&1 & echo "[INFO] $JAR_NAME started. Logs: $LOG_FILE" fi } # 停止函数 stop() { is_exist if [ $? -eq 0 ]; then kill -9 $pid echo "[INFO] $JAR_NAME (PID:$pid) stopped." else echo "[WARN] $JAR_NAME is not running" fi } # 重启函数 restart() { stop sleep 2 start } # 状态查询 status() { is_exist if [ $? -eq 0 ]; then echo "[INFO] $JAR_NAME is running. PID: ${pid}" else echo "[INFO] $JAR_NAME is NOT running" fi } # 参数解析 case "$1" in "start") start ;; "stop") stop ;; "restart") restart ;; "status") status ;; *) echo "Usage: $0 {start|stop|restart|status}" exit 1 esac ``` #### 二、使用步骤 1. **创建脚本文件** ```shell vim jar-manager.sh ``` 2. **修改配置参数** - 替换`JAR_NAME`为实际JAR文件名 - 按需配置`LOAD_PATH`(外部依赖目录) - 配置`CONFIG_PATH`(Spring Boot配置文件路径) - 设置`LOG_FILE`日志输出路径 3. **添加执行权限** ```shell chmod +x jar-manager.sh ``` 4. **执行操作命令** ```shell # 启动应用 ./jar-manager.sh start # 停止应用 ./jar-manager.sh stop # 重启应用 ./jar-manager.sh restart # 查看状态 ./jar-manager.sh status ``` #### 三、关键功能说明 1. **进程检测** 通过`ps -ef | grep`过滤进程并获取PID,确保不会误操作其他进程[^2][^3] 2. **日志管理** - `> $LOG_FILE` 重定向标准输出到日志文件 - `2>&1` 将错误输出合并到标准输出 - `nohup` 保证SSH断开后进程继续运行 3. **配置文件支持** Spring Boot项目可通过`--spring.config.location`指定外部配置文件路径[^2] 4. **依赖库加载** 使用`-Dloader.path`参数加载外部JAR依赖,适用于需要分离主与依赖的场景[^2] #### 四、高级功能扩展建议 1. **内存参数配置** 在java命令中添加内存设置: ```shell JAVA_OPTS="-Xms512m -Xmx1024m" nohup java $JAVA_OPTS $LOAD_PATH -jar ... ``` 2. **启动等待检测** 添加健康检查逻辑,通过curl检测服务端口是否就绪 3. **版本回滚** 结合Git版本控制或备份目录实现版本切换 4. **集群部署** 使用并行SSH工具(如pssh)批量执行脚本 #### 五、调试技巧 1. 启用调试模式: ```shell set -x # 开启命令回显 set +x # 关闭命令回显 ``` 2. 查看完整执行流程: ```shell bash -x jar-manager.sh start ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值