61 lines
2.1 KiB
Bash
Executable File
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" |