目标:当 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、计划任务
