侧边栏壁纸
博主头像
风华科技 博主等级

行动起来,活在当下

  • 累计撰写 267 篇文章
  • 累计创建 25 个标签
  • 累计收到 4 条评论

目 录CONTENT

文章目录

Docker容器检测脚本

风华
2025-03-26 / 0 评论 / 0 点赞 / 18 阅读 / 2763 字
广告 广告
文章摘要
TianliGPT
生成中...

docker容器检测脚本

1、脚本内容:

脚本路径:/root/check_docker_containers.sh
脚本功能:每隔30秒检测一次所有容器状态,非running,则手动重启该容器,并把结果记录到/root/docker_container_check.log 文件中

root@IT:~# cat check_docker_containers.sh 
#!/bin/bash

# 日志文件路径
LOG_FILE="/root/docker_container_check.log"

# 清空日志的时间间隔(以秒为单位)
CLEAR_INTERVAL=$((2 * 24 * 60 * 60))  # 每两天

# 获取当前时间戳
LAST_CLEAR=$(date +%s)

while true; do
    # 检查所有容器的状态
    containers=$(docker ps -qa)
    containers_to_restart=()

    # 遍历状态
    for container in $containers; do
        status=$(docker inspect -f '{{.State.Status}}' $container)
        if [[ "$status" != "running" ]]; then
            containers_to_restart+=($container)  # 记录需要重启的容器
        fi
    done

    # 记录当前时间
    CURRENT_TIME=$(date)

    # 如果有容器不是running,重启对应的容器
    if [ ${#containers_to_restart[@]} -gt 0 ]; then
        for container in "${containers_to_restart[@]}"; do
            echo "$CURRENT_TIME: Container $container is not running. Restarting..." >> "$LOG_FILE"
            docker restart $container
            echo "$CURRENT_TIME: Container $container has been restarted." >> "$LOG_FILE"
        done
    fi

    # 清空日志
    CURRENT_TIMESTAMP=$(date +%s)
    if (( CURRENT_TIMESTAMP - LAST_CLEAR >= CLEAR_INTERVAL )); then
        > "$LOG_FILE"  # 清空日志文件
        echo "$CURRENT_TIME: Log file cleared." >> "$LOG_FILE"
        LAST_CLEAR=$CURRENT_TIMESTAMP  # 更新最后清空日志的时间
    fi

    # 等待30秒
    sleep 30
done

2、systemctl启动脚本编写

root@IT:~# cat /etc/systemd/system/check_docker_containers.service 
[Unit]
Description=Check Docker Containers Service
After=docker.service

[Service]
Type=simple
ExecStart=/root/check_docker_containers.sh
Restart=always
RestartSec=30

[Install]
WantedBy=multi-user.target

3、赋予脚本执行权限,并配置开机自启

root@IT:~# chmod +x check_docker_containers.sh 
root@IT:~# systemctl daemon-reload
root@IT:~# systemctl enable --now check_docker_containers.service

4、测试结果

# 查看所有容器
oot@wwww:~# docker ps
CONTAINER ID   IMAGE                                   COMMAND                  CREATED        STATUS                 PORTS                                                  NAMES
5f158b05f67e   itushan/mtab                            "sh -c 'sleep 30 && …"   3 months ago   Up 3 hours             0.0.0.0:9200->80/tcp, :::9200->80/tcp                  mTabServer
83fcdda0f90c   mysql:8.1.0                             "docker-entrypoint.s…"   3 months ago   Up 3 hours             33060/tcp, 0.0.0.0:9201->3306/tcp, :::9201->3306/tcp   mtab_sql
251335225ed0   registry.fit2cloud.com/halo/halo:2.20   "sh -c 'java ${JVM_O…"   3 months ago   Up 3 hours (healthy)   0.0.0.0:8090->8090/tcp, :::8090->8090/tcp              halo_halo_1
be1a99af0e57   mysql:8.1.0                             "docker-entrypoint.s…"   3 months ago   Up 3 hours (healthy)   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   halo_halodb_1

# 手动停止一个容器
root@wwww:~# docker stop halo_halo_1 
halo_halo_1

# halo的容器已经停止了。
root@wwww:~# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED        STATUS                 PORTS                                                  NAMES
5f158b05f67e   itushan/mtab   "sh -c 'sleep 30 && …"   3 months ago   Up 3 hours             0.0.0.0:9200->80/tcp, :::9200->80/tcp                  mTabServer
83fcdda0f90c   mysql:8.1.0    "docker-entrypoint.s…"   3 months ago   Up 3 hours             33060/tcp, 0.0.0.0:9201->3306/tcp, :::9201->3306/tcp   mtab_sql
be1a99af0e57   mysql:8.1.0    "docker-entrypoint.s…"   3 months ago   Up 3 hours (healthy)   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   halo_halodb_1


# 等待30秒,查看日志
root@wwww:~# cat docker_container_check.log 
Wed Mar 26 02:17:15 PM CST 2025: Container 251335225ed0 is not running. Restarting...
Wed Mar 26 02:17:15 PM CST 2025: Container 251335225ed0 has been restarted.

# 查看容器,成功拉起
root@wwww:~# docker ps
CONTAINER ID   IMAGE                                   COMMAND                  CREATED        STATUS                            PORTS                                                  NAMES
5f158b05f67e   itushan/mtab                            "sh -c 'sleep 30 && …"   3 months ago   Up 3 hours                        0.0.0.0:9200->80/tcp, :::9200->80/tcp                  mTabServer
83fcdda0f90c   mysql:8.1.0                             "docker-entrypoint.s…"   3 months ago   Up 3 hours                        33060/tcp, 0.0.0.0:9201->3306/tcp, :::9201->3306/tcp   mtab_sql
251335225ed0   registry.fit2cloud.com/halo/halo:2.20   "sh -c 'java ${JVM_O…"   3 months ago   Up 7 seconds (health: starting)   0.0.0.0:8090->8090/tcp, :::8090->8090/tcp              halo_halo_1
be1a99af0e57   mysql:8.1.0                             "docker-entrypoint.s…"   3 months ago   Up 3 hours (healthy)              0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   halo_halodb_1
0
广告 广告

评论区