#!/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"