#!/bin/bash set -o nounset # 遇到没定义的变量报错后,终止继续执行脚本文件 set -o errexit # 执行失败以后,终止继续执行脚本文件 # Jar包应用名称 STOP_APPLICATION_NAME=$1 # 监听应用停止时间 MAX_TIMEOUT=10 oldPid=$(ps ax | grep $STOP_APPLICATION_NAME | grep java | head -1 | awk '{print $1}') if [ ${oldPid} ]; then echo '开始停止【'$STOP_APPLICATION_NAME'】服务, pid【'$oldPid'】' kill -15 $oldPid fi for((i=1;i<=$MAX_TIMEOUT;i++)) do # 等待1秒 sleep 1 oldPid=$(ps ax | grep $STOP_APPLICATION_NAME | grep java | head -1 | awk '{print $1}') if [ ${oldPid} ]; then echo '正在停止【'$STOP_APPLICATION_NAME'】服务, pid【'$oldPid'】... ... ('$i's)' else break fi done if [ ${oldPid} ]; then echo '尝试'$MAX_TIMEOUT'次优雅停止【'$STOP_APPLICATION_NAME'】服务, pid【'$oldPid'】失败,强制停止!!!' kill -9 $oldPid else echo '成功停止【'$STOP_APPLICATION_NAME'】服务, pid【'$oldPid'】' fi oldPid=$(ps ax | grep $STOP_APPLICATION_NAME | grep java | head -1 | awk '{print $1}') if [ ${oldPid} ]; then echo 'App is running.' sleep 2 else echo '【'$STOP_APPLICATION_NAME'】服务停止成功, pid【'$oldPid'】!' fi # 删除pid文件 rm -f $STOP_APPLICATION_NAME.pid