- 对于普通进程或者docker容器进程,原理都基本一致,理解即可
- 查询进程的pid
- 这里以mysql 为例查找
- 利用ps aux | grep mysql (这里利用ps- ef效果都是一样的)
可以看到pid在第二列,这里需要注意。
-
将此命令加进脚本里面
#!/bin/bash #mysql的所有进程的PID pid=$(ps aux | grep "mysql" | awk ‘{print $2}‘) echo "mysql所有相关PID:"$pid
分析: ps是查看指令, grep是条件 ,awk是打印我们需要的字段PID在第二个字段 print $2 ,print $1就会是root。
我们加入限制条件查找local下的mysq#!/bin/bash pid=$(ps aux | grep "mysql" | awk ‘{print $2}‘) echo "mysql的所有进程的PID:" $pid #第二组 pid2=$(ps aux | grep ‘mysql‘ | grep ‘local‘ | awk ‘{print $2}‘) echo "local下的mysql进程PID:"$pid2 #第三组 pid2=$(ps aux | grep ‘mysql‘ | grep ‘local‘ | awk ‘{print $1}‘) echo "打印第一个列内柔:"$pid2
搜索容器相关进程(主要利用docker ps或者docker ps -a ,搜索到进程之后就可以进行一系列的操作,这里只是举两个小例子) - 第一种情况也是我写该脚本的主要原因,我自己是利用Vmare来学习,但一不小心重启或者断电,则容器都是停止状态,每次还要一个个的启动,为了省事,所以写了个脚本来启动容器(能够一键式的傻瓜式操作,尽量利用脚本或者宏之类的来代替,省时又省力~),这里docker ps -a是搜索所有的容器,包括已停止运行的。
-
#!/bin/bash master_id=$(docker ps -a|grep "master" |awk ‘{print $1}‘) echo "=====The master containerId is :"$master_id========= slave01_id=$(docker ps -a |grep "slave01"|awk ‘{print $1}‘) echo "=====The slave01 containerId is :"$slave01_id======= slave02_id=$(docker ps -a |grep "slave02"|awk ‘{print $1}‘) echo "=====The slave02 containerId is :"$slave02_id======= docker restart $master_id docker restart $slave01_id docker restart $slave02_id echo "---------------successful to start master,slave01 and slave02-----------------------"
-
这里利用start和restart的效果应该是一致的,我后来也写了一个关闭所有相关容器的脚本,与这个大同小异。
-
- 第二种情况去利用镜像运行容器,然后再搜索响应进程
-
#!/bin/bash #运行mysql docker run -d -p 4406:3306 registry.cn-hangzhou.aliyuncs.com/zhufc/mysql:v2 docker ps #获取到ID id=$(docker ps |grep "mysql" | awk ‘{print $1}‘) echo "容器id:"$id #进入容器 docker exec -it $id bash #打印当前的路径 pwd
-