想记录重启的是哪个docker该怎么改脚本

想记录重启的是哪个docker该怎么改脚本

img

#!/bin/sh
set -x 
dir=/home/watch_log/
mkdir -p $dir
cd $dir

   if [ `docker ps -a |grep Exited |awk '{print $12}' |grep -v "nginx02" |grep -v "^$"  | grep -v grep -c` > 0 ]; then
    docker ps -a |grep Exited |awk '{print $12}'|grep -v "nginx02" |grep -v "^$"  |grep -v "CONTAINER"  | xargs -n 1 docker restart
   echo  "`date +%Y_%m_%d_%H%M`_restart_docker"  >>$dir/docker.log
   fi

这个脚本定时执行后,会检测nginx03、nginx04和nginx05是否挂了,如果挂了会自动重启,但如果想要记录重启的到底是nginx03还是nginx04,还是nginx05,脚本应该怎么改?实际环境可能有十多个docker ,应该怎么去记录重启的是哪个docker,谢谢

docker restart命令执行之后,就会输出相应的容器名称。你可以直接在后面>>重定向到记录的文件里面。
或者再用一层管道,先记录一下重启时的系统时间,再记录管道传过来的容器名。这样可以看到每个容器每次的重启时间了

为什么不用docker-compose?在docker-compose.yml文件里加上restart: always

services:
  nginx:
    image: nginx:latest
    restart: always
    ...

推荐使用监控软件进行管理nginx。我这个有现成的案例
运维:Centos8安装supervisor守护Nginx进程笔记_IT技术分享社区的博客-CSDN博客_centos8安装supervisor


#!/bin/sh
set -x 
dir=/home/watch_log/
mkdir -p $dir
cd $dir
if [ `docker ps -f status=exited -f name="^nginx" | grep -c Exited` -gt 0 ];then
  docker ps -f status=exited -f name="^nginx" | grep Exited | awk '{print $NF}' | while read line;do
    docker restart $line
    echo "`date +%Y_%m_%d_%H%M`_restart_docker $line"  >>$dir/docker.log
  done
fi