文章摘要
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
评论区