目标:当 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容器。