自动监控docker服务是否正常,若docker服务奔溃自动重启,监控docker所有容器状态,任何一个容器离线都会自动重启。
#!/bin/bash
#获取docker服务进程
docker_id=`ps -ef | grep -v grep | grep /usr/bin/dockerd | wc -l`
#判断docker服务是否存在
if [ $docker_id -gt 0 ];
then
# echo "docker is runing!"
true
else
systemctl start docker
fi
# 获取所有容器ID
CONTAINER_IDS=$(docker ps -aq)
# 循环监控所有容器
for id in $CONTAINER_IDS
do
# 获取容器名称
CONTAINER_NAME=$(docker inspect --format='{{.Name}}' $id | awk -F / '{print $2}')
# 检查容器是否在运行
RUNNING=$(docker inspect --format="{{.State.Running}}" $id)
# 如果容器不在运行状态,启动容器
if [ "$RUNNING" != "true" ]; then
echo "Container $CONTAINER_NAME is not running. Restarting now..."
docker start $id
fi
done
# 等待10秒后重新检查所有容器状态
#sleep 10
# 重新调用脚本自身,实现循环监控
#sh /a/docker-monitor.sh
exit 0
按容器名称监控,容器关闭自动重启。
CONTAINER_NAME="my-httpd"
if [ "$(docker ps -q -f name=$CONTAINER_NAME)" ]; then
echo "$CONTAINER_NAME container is already running"
else
# 如果容器没有运行则启动它
echo "$CONTAINER_NAME container is not running, starting it now"
docker start $CONTAINER_NAME
fi