#!/bin/bash # Vigilante del crawl: ficheros, 500 del servidor, RAM. Aborta si el servidor se degrada. set -uo pipefail BASE=/home/rafa/joomla-migration/mirror-antiguo RUN=$(cat "$BASE/CURRENT_RUN") DIR=$BASE/runs/$RUN ST=$DIR/logs/monitor.log MAX500=${MAX500:-100} MINMEM_MB=${MINMEM_MB:-800} T0=$(date +%s) echo "monitor arrancado $(date -u +%FT%TZ) run=$RUN max500=$MAX500" > "$ST" while true; do sleep 60 pgrep -f 'wget --input-file=' >/dev/null || { echo "$(date -u +%FT%TZ) crawl terminado, monitor sale" >> "$ST"; break; } files=$(find "$DIR/raw" -type f 2>/dev/null | wc -l) size=$(du -sm "$DIR/raw" 2>/dev/null | cut -f1) e500=$(docker logs --since "$T0" joomla-mirror-web 2>&1 | grep -c '" 500 ') e408=$(docker logs --since "$T0" joomla-mirror-web 2>&1 | grep -c '" 40[38] ') mem=$(free -m | awk '/^Mem:/{print $7}') cmem=$(docker stats --no-stream --format '{{.MemUsage}}' joomla-mirror-web 2>/dev/null) el=$(( $(date +%s) - T0 )) pct=$(awk -v f="$files" 'BEGIN{printf "%.1f", f*100/25437}') printf '%s t=%ss ficheros=%s (%s%%) %sMB 500=%s 40x=%s ram_libre=%sMB cont=%s\n' \ "$(date -u +%FT%TZ)" "$el" "$files" "$pct" "$size" "$e500" "$e408" "$mem" "$cmem" >> "$ST" if [ "$e500" -gt "$MAX500" ]; then echo "!!! ABORTO: $e500 respuestas 500 (umbral $MAX500)" >> "$ST" pkill -f 'wget --input-file=' break fi if [ "$mem" -lt "$MINMEM_MB" ]; then echo "!!! ABORTO: RAM libre ${mem}MB por debajo de ${MINMEM_MB}MB" >> "$ST" pkill -f 'wget --input-file=' break fi done