24 lines
1.1 KiB
Bash
24 lines
1.1 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
home="${DOBOTAI_HOME:-/opt/dobotai}"
|
|
container_dir="$home/container"
|
|
compose_file="$container_dir/compose.yaml"
|
|
runtime_env="$container_dir/runtime.env"
|
|
health_url="http://127.0.0.1:8090/healthz"
|
|
[[ -r "$compose_file" && -r "$runtime_env" ]] || { echo "容器资产未安装。" >&2; exit 1; }
|
|
"$container_dir/rds-schema-init.sh"
|
|
compose=(docker compose --env-file "$runtime_env" -f "$compose_file")
|
|
previous_image="$(docker inspect -f '{{.Config.Image}}' dobotai-dingtalk 2>/dev/null || true)"
|
|
rollback() {
|
|
"${compose[@]}" rm -sf dobotai-dingtalk >/dev/null 2>&1 || true
|
|
if [[ -n "$previous_image" ]]; then "${compose[@]}" up -d --no-build --force-recreate dobotai-dingtalk >/dev/null 2>&1 || true; fi
|
|
}
|
|
trap rollback ERR
|
|
"${compose[@]}" up -d --no-build --force-recreate dobotai-dingtalk
|
|
for _ in $(seq 1 30); do
|
|
if curl --noproxy '*' --fail --silent --max-time 2 "$health_url" >/dev/null; then trap - ERR; echo "DobotAI容器已启动:dobotai-dingtalk"; exit 0; fi
|
|
sleep 1
|
|
done
|
|
echo "DobotAI健康检查失败,已恢复上一应用容器(如存在)。" >&2
|
|
exit 1
|