问题场景:在同一VM上部署了同一应用的docker版本和非docker版本,在基于非docke版本应用做jenkins CI/CD时,通过ps -ef操作获取应用的pid,会受到docker版本应用的干扰,如下
以上只有pid=2948为非docker应用。
在之前 spring boot jar项目启停脚本 基础上增加getAppPid()函数,如下
## 0 - docker disabled; 1 - docker enabled DOCKER_ENABLED=1 getAppPid() { local flag=1 PIDS=$(ps --no-heading -C java -f --width 1000 | grep $1 | awk '{print $2}') ARR_PIDS=($PIDS) #echo "PIDS=${ARR_PIDS[*]}" if [ $DOCKER_ENABLED -eq 1 ] then PIDS_DOCKER=$(docker inspect -f '{{.State.Pid}}' $(docker ps -q)) #ARR_PIDS_DOCKER=($PIDS_DOCKER) #echo "PIDS_DOCKER=${ARR_PIDS_DOCKER[*]}" for idx in "${!ARR_PIDS[@]}" do flag=0 for pidd in $PIDS_DOCKER ; do if [ "${ARR_PIDS[$idx]}" -eq "$pidd" ]; then #echo "find docker pidd=${ARR_PIDS[$idx]}" flag=1 break fi done if [ $flag -eq 0 ]; then #echo "get non-docker PID=${ARR_PIDS[$idx]}" res[${#res[@]}]=${ARR_PIDS[$idx]} fi done else res=(${ARR_PIDS[*]}) fi echo ${res[*]} }
将原来
ps --no-heading -C java -f --width 1000 | grep $JAR_NAME | awk '{print $2}'
替换成
getAppPid $JAR_NAME标签:ARR,shell,echo,PIDS,版本,docker,DOCKER From: https://www.cnblogs.com/hello-yz/p/16796523.html