首页 > 系统相关 >同一应用docker版本和非docker版本共存下,利用shell脚本获取非docker版本pid

同一应用docker版本和非docker版本共存下,利用shell脚本获取非docker版本pid

时间:2022-10-16 16:56:01浏览次数:73  
标签:ARR shell echo PIDS 版本 docker DOCKER

问题场景:在同一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

相关文章

  • 1490_TC275_UART_shell例程测试
    前面我已经测试了UART的简单例子,并且还修改了PIN脚通过Arduino来读取了串口信息。这是一个比较简单的监控方式,只需要一个PIN就能够给我提供printf打印功能。而这样的工具对......
  • 在Docker容器中运行Elasticsearch、Kinbana、Cerebo、Logstash
    确保自己的Centos环境中已经安装好了Docker,Docker-compose相关的软件安装cerebro、es、kibana编写docker-compose.yml文件,部署单机环境version:'3.5'services:cer......
  • 使用Docker容器安装Elasticsearch,Kibana
    安装前请确保linux已经安装好了Docker和DockerCompose,并配置好Docker镜像容器加速,推荐使用国内镜像加速地址,例如阿里云或者DaoCloud的镜像加速服务。需要注册帐号准备......
  • xp_cmdshell的启用与关闭
    1、xp_cmdshell简介:xp_cmdshell扩展存储过程将命令字符串作为操作系统命令shell执行,并以文本行的形式返回所有输出。一般情况下默认处于关闭状态  2、开启xp_cmd......
  • Shell语法基础
    ​ 1.Linux脚本编写基础1.1语法基本介绍1.1.1开头程序必须以下面的行开始(必须方在文件的第一行):#!/bin/sh符号#!用来告诉系统它后面的参数是用来执行该文件......
  • MySQL-8.0版本的docker-compose安装脚本(单实例)
    1.需求场景在开发和测试环境中,或者研究型的环境,对于数据库的安全和稳定性可以稍低一些,那么我们可以通过docker快速部署MySQL服务,降低部署的时间成本。2.脚本2.1目录......
  • vue框架不同构建版本的理解
    例如拿vue框架来说官网对于VUE不同构建版本的解释UMDCommonJSESModule(基于构建工具使用)ESModule(直接用于浏览器)完整版vue.jsvue.common.jsvue.......
  • shell 学习
    https://www.bilibili.com/video/BV1Eq4y1z7u8/笔记查找指定进程格式(ngnix):ps-ef|grepngnix详解UID用户IDpid内存进程IDppid程序的父进程ID父进程?......
  • docker nginx 容器(temp)
    一、安装docker二、下载nginx容器命令:dockerpullnginx 三、启动容器dockerrun-p8000:80-dnginxs 四、编写index.html页面viindex.html写入hellow......
  • Linux之Docker-01
    一、镜像基础命令1、dockerversion[root@DY-Ubuntu-01~]#dockerversion#查看Docker版本2、dockerinfo[root@DY-Ubuntu-01~]#dockerinfoClient:Con......