20-sep: watchdog Gitea (systemd) + fix monitor Kuma
This commit is contained in:
60
vps/gitea/gitea_watchdog.sh
Normal file
60
vps/gitea/gitea_watchdog.sh
Normal file
@@ -0,0 +1,60 @@
|
||||
#!/bin/bash
|
||||
# Vigilante de Gitea (VPS Contabo).
|
||||
# Si el contenedor no esta sano N veces seguidas, lo recrea desde /root/docker-compose.yml.
|
||||
# Los datos viven en el bind /root/gitea/data, por lo que recrear NO los toca.
|
||||
set -u
|
||||
|
||||
DOCKER=/usr/bin/docker
|
||||
COMPOSE_DIR=/root
|
||||
CONTAINER=gitea
|
||||
HEALTH_URL=http://127.0.0.1:3000/api/healthz
|
||||
LOG=/var/log/gitea-watchdog.log
|
||||
STATE_DIR=/var/lib/gitea-watchdog
|
||||
STATE=$STATE_DIR/fails
|
||||
MAX_FAILS=2
|
||||
|
||||
mkdir -p "$STATE_DIR"
|
||||
touch "$STATE"
|
||||
|
||||
log() { echo "$(date '+%F %T') $*" >> "$LOG"; }
|
||||
|
||||
# Rotar log si crece demasiado (1 MB)
|
||||
if [ -f "$LOG" ] && [ "$(stat -c%s "$LOG" 2>/dev/null || echo 0)" -gt 1048576 ]; then
|
||||
mv -f "$LOG" "$LOG.1"
|
||||
fi
|
||||
|
||||
status=$("$DOCKER" inspect "$CONTAINER" --format '{{.State.Status}}' 2>/dev/null || echo missing)
|
||||
|
||||
healthy=0
|
||||
if [ "$status" = "running" ]; then
|
||||
body=$("$DOCKER" exec "$CONTAINER" wget -qO- --timeout=8 "$HEALTH_URL" 2>/dev/null || true)
|
||||
if echo "$body" | grep -q '"status": *"pass"'; then
|
||||
healthy=1
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$healthy" = "1" ]; then
|
||||
if [ "$(cat "$STATE" 2>/dev/null || echo 0)" != "0" ]; then
|
||||
log "Gitea vuelve a estar OK (status=$status)."
|
||||
fi
|
||||
echo 0 > "$STATE"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
fails=$(cat "$STATE" 2>/dev/null || echo 0)
|
||||
case "$fails" in ''|*[!0-9]*) fails=0 ;; esac
|
||||
fails=$((fails + 1))
|
||||
echo "$fails" > "$STATE"
|
||||
log "Gitea NO saludable (status=$status, fallo $fails/$MAX_FAILS)."
|
||||
|
||||
if [ "$fails" -ge "$MAX_FAILS" ]; then
|
||||
log "Recreando contenedor '$CONTAINER' desde $COMPOSE_DIR ..."
|
||||
cd "$COMPOSE_DIR" || { log "ERROR: no existe $COMPOSE_DIR"; exit 1; }
|
||||
if "$DOCKER" compose version >/dev/null 2>&1; then
|
||||
"$DOCKER" compose up -d --force-recreate --no-deps "$CONTAINER" >> "$LOG" 2>&1
|
||||
else
|
||||
docker-compose up -d --force-recreate --no-deps "$CONTAINER" >> "$LOG" 2>&1
|
||||
fi
|
||||
log "Recreacion lanzada (exit=$?)."
|
||||
echo 0 > "$STATE"
|
||||
fi
|
||||
Reference in New Issue
Block a user