同一应用docker版本和非docker版本共存下,利用shell脚本获取非docker版本pid
问题场景:在同一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
清醒时做事,糊涂时读书,大怒时睡觉,独处时思考; 做一个幸福的人,读书,旅行,努力工作,关心身体和心情,成为最好的自己
-- 共勉