目标:当 Halo 容器运行时出现访问问题时,系统能够自动恢复容器的访问功能。

1、Shell脚本

# 定义要检查的URL
URL="http://127.0.0.1:8090"

# 定义要重启的容器名称
CONTAINER_NAME="1Panel-halo-Xz1q"

# 使用GET请求检查URL,设置超时时间为60秒
response_code=$(curl -s -o /dev/null -w "%{http_code}" --max-time 60 $URL)

# 检查HTTP状态码是否为2xx(表示成功)
if [[ "$response_code" =~ ^2[0-9]{2}$ ]]; then
    echo "URL可访问 (HTTP 200)。"
else
    echo "URL不可访问 (HTTP $response_code)。 重新启动容器 $CONTAINER_NAME..."
    docker restart $CONTAINER_NAME
fi

参数:

  • URL在同一个服务器上,可以使用 127.0.0.1 作为 IP 地址,URL="http://127.0.0.1:8090",其中8090需要填写正确的端口;

  • CONTAINER_NAME填写容器的名称,本例为:1Panel-halo-Xz1q

Get请求:

  • curl 是一个命令行工具,用于发送HTTP请求。

  • -s 选项表示静默模式,不显示进度条或错误信息。

  • -o /dev/null 表示将输出重定向到 /dev/null,即丢弃响应体。

  • -w "%{http_code}" 表示只输出HTTP状态码。

  • --max-time 60 表示设置请求的最大超时时间为60秒。

  • $URL 是要检查的URL地址。

状态码检查:

  • if [[ "$response_code" =~ ^2[0-9]{2}$ ]]; then:这是一个条件判断语句,使用正则表达式检查 response_code 是否为2xx(即200到299之间的状态码)。

    • ^2[0-9]{2}$ 是一个正则表达式,表示以2开头,后跟两个数字的字符串。

  • 如果状态码是2xx,则输出 URL可访问 (HTTP 200)。

  • 如果状态码不是2xx,则输出 URL不可访问 (HTTP response_code)。 重新启动容器 CONTAINER_NAME...,并执行 sudo docker restart $CONTAINER_NAME 命令来重启指定的Docker容器。

2、计划任务