server-ovh-prod-01-main/scripts/container-health-monitor.sh

61 lines
2.1 KiB
Bash
Executable File

#!/bin/bash
# Container Health Monitor & Restart Script
# Monitors BestSolarTech containers and restarts if needed
LOG_FILE="/home/jared/services/monitor.log"
MAX_MEMORY_PERCENT=40 # Restart if container uses >40% of system memory
MAX_LOG_SIZE=100000000 # 100MB in bytes
log_message() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> "$LOG_FILE"
}
# Rotate log if too large
if [ -f "$LOG_FILE" ] && [ $(stat -f%z "$LOG_FILE" 2>/dev/null || stat -c%s "$LOG_FILE" 2>/dev/null) -gt $MAX_LOG_SIZE ]; then
mv "$LOG_FILE" "$LOG_FILE.old"
log_message "Log rotated"
fi
# Check container health
check_container() {
local container=$1
local service_name=$2
# Check if container is running
if ! docker ps --format "{{.Names}}" | grep -q "^${container}$"; then
log_message "WARNING: $container is not running. Attempting restart..."
cd /home/jared/services/$service_name && docker compose restart
return 1
fi
# Check memory usage
local mem_percent=$(docker stats --no-stream --format "{{.MemPerc}}" "$container" | sed 's/%//')
if (( $(echo "$mem_percent > $MAX_MEMORY_PERCENT" | bc -l) )); then
log_message "WARNING: $container using ${mem_percent}% memory. Restarting..."
cd /home/jared/services/$service_name && docker compose restart
return 1
fi
# Check if WordPress site responds (only for wp container)
if [ "$container" == "bestsolartech_wp" ]; then
if ! curl -sf -o /dev/null -w "%{http_code}" --max-time 10 https://bestsolartech.com | grep -q "200\|301\|302"; then
log_message "WARNING: BestSolarTech site not responding. Restarting containers..."
cd /home/jared/services/$service_name && docker compose restart
return 1
fi
fi
return 0
}
# Main monitoring
log_message "Starting health check"
# Check BestSolarTech containers
check_container "bestsolartech_wp" "bestsolartech"
check_container "bestsolartech_db" "bestsolartech"
# Clean up Docker system (remove unused data)
docker system prune -f --volumes 2>&1 | grep -E "Total reclaimed space" >> "$LOG_FILE"
log_message "Health check completed"