你是否遇到这样的问题:某服务因为环境 CPU 运力不足导致该服务器上的 Jenkins 容器构建项目的时候会挂掉 ,然后需要重新执行 docker restart <容器ID>。
这个过程非常麻烦,所以想让它自动重启。此时:可以写个检测容器是否挂掉的脚本,然后加到服务器的定时任务中,自动触发扫描就可以了。此方案在生产环境中不建议使用,频繁扫描会浪费性能,建议提高服务器的性能等方案。
编写检测脚本
#!/bin/bash
# 容器名称
CONTAINER_NAME="myjenkins"
# 检查容器状态并重启
check_and_restart_container() {
# 获取容器 ID
CONTAINER_ID=$(docker ps -aqf "name=^${CONTAINER_NAME}$")
if [[ -z "$CONTAINER_ID" ]]; then
# 容器不存在,直接退出
exit 0
fi
# 检查容器状态
STATUS=$(docker inspect -f '{{.State.Running}}'$CONTAINER_ID 2>/dev/null)
# 如果容器不存在或者已停止,重启容器
if [[ "$STATUS" != "true" ]]; then
docker restart $CONTAINER_ID >/dev/null 2>&1
fi
}
授权脚本执行权限
chmod +x /local/cron/check_and_restart_container.sh
添加到定时任务
每10秒执行一次
* * * * * /local/cron/check_and_restart_container.sh
* * * * * sleep 10 && /local/cron/check_and_restart_container.sh