shell脚本部署springboot

#!/bin/bash

echo "$1 jar包名称,$2 运行环境 " 

echo "====reload jar: $1 env: $2 ==== " 

if [ -z $1 ];then
    echo "请输入jar包名称......."
else
    echo "停止开始......."

    ID=`ps -ef | grep "$1" | grep -v "grep" | grep -v "reload.sh" | awk '{print $2}'`

    echo $ID

    for id in $ID
     do
     kill -9 $id
     echo "killed $id"
     done

    sleep 2s

    echo "停止成功......."

    echo "start $1"

    nohup java -Xms2048M -Xmx2048M -jar $1  --spring.profiles.active=$2  >/dev/null 2>&1 &

    echo "sucess"
fi

命令解析:

ps -ef | grep "hzz-ha-1.0-SNAPSHOT.jar" | grep -v "grep" | grep -v "reload.sh" | awk '{print $2}'

这条命令的作用是查找并输出运行指定jar包的进程ID,其中:

- `ps -ef`:列出所有进程信息

- `grep "hzz-ha-1.0-SNAPSHOT.jar"`:过滤包含该jar包名的进程

- `grep -v "grep"`:过滤掉grep自己的进程(第一层grep产生的进程信息)

- `grep -v "reload.sh"`:过滤掉运行这个脚本本身的进程,脚本名称:reload.sh

- `awk '{print $2}'`:打印出进程的PID,也就是命令的第二列

所以它通过两层过滤:

1. 第一层过滤找到包含指定jar包名的进程

2. 第二层过滤排除grep和脚本本身进程

最后用awk仅打印进程的PID。

这样可以准确定位到运行该jar的进程ID,而不会将grep和脚本本身也当成目标进程杀死。

整条命令实现了精确的进程搜索与过滤。

ID=`ps -ef | grep "$1" | grep -v "grep" | grep -v "reload.sh" | awk '{print $2}'`

echo $ID

for id in $ID

do

kill -9 $id

echo "killed $id"

done

sleep 2s

echo "停止成功......."

这段脚本代码是用于停止指定名称的Java进程,关键步骤解析如下:

1. 使用ps和grep查找指定名称进程的所有PID,并保存到变量ID中

2. 打印出找到的PID

3. 用for循环遍历PID列表

4. 对每个PID执行kill -9操作,强制停止该进程

5. 打印已停止的进程ID信息

6. sleep 2秒,留出停止进程的时间

7. 打印“停止成功”信息

这样通过先获取PID列表,然后循环终止进程,可以实现批量停止进程的效果。

for循环可以处理PID变量包含多个PID的情况,确保都会被停止,避免漏掉某些进程没有被结束。

使用:

./reload.sh xxx.jar dev

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值