%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /scripts2/
Upload File :
Create Path :
Current File : //scripts2/recover_system.sh

#!/bin/bash

# Configuration
LOG_FILE="/var/log/system_report.log"
ADMIN_EMAIL="sysadmin@sitioshispanos.com"
LOAD_THRESHOLD=50  # System load threshold

# Check if a command exists before executing it
function check_command {
    command -v "$1" >/dev/null 2>&1 || { echo "āŒ ERROR: Command '$1' is not installed."; exit 1; }
}

# Ensure no other instance of the script is running
function sanity_check {
    local running_instances
    running_instances=$(ps -ef | grep "$0" | grep -v "grep" | grep -v "$$" | wc -l)

    if [[ "$running_instances" -ne 0 ]]; then
        echo "Another instance of $0 is already running..."
        exit 1
    fi
}

# Start the daemon
function start_daemon {
    sanity_check
    echo "Starting daemon..."
    main_loop
}

# Stop the daemon
function shutdown_daemon {
    echo "Stopping daemon..."
    ps -ef | grep "$0" | grep -v "$$" | grep -v "grep" | awk '{print $2}' | xargs kill
}

# Generate system report
function generate_system_report {
    echo "===============================" > "$LOG_FILE"
    echo "šŸ“ SYSTEM REPORT $(date)" >> "$LOG_FILE"
    echo "===============================" >> "$LOG_FILE"

    # Process report
    echo -e "\nšŸ”¹ Top CPU/Memory consuming processes:" >> "$LOG_FILE"
    ps aux --sort=-%mem,-%cpu | head -20 >> "$LOG_FILE"

    # CPU and memory usage report
    echo -e "\nšŸ”¹ CPU and Memory Usage:" >> "$LOG_FILE"
    check_command "sar"
    sar -u 5 1 | grep "Average" >> "$LOG_FILE"
    free -h >> "$LOG_FILE"

    # Disk usage report
    echo -e "\nšŸ”¹ Disk Usage:" >> "$LOG_FILE"
    df -h >> "$LOG_FILE"

    # MySQL running queries
    echo -e "\nšŸ”¹ Active MySQL Queries:" >> "$LOG_FILE"
    check_command "mysql"
    mysql -e "SHOW FULL PROCESSLIST;" >> "$LOG_FILE"

    # Apache active requests
    echo -e "\nšŸ”¹ Apache Active Requests:" >> "$LOG_FILE"
    check_command "apachectl"
    apachectl fullstatus 2>/dev/null | grep -E "PID|requests/sec|CPU Usage|Total accesses|request|Waiting for Connection" >> "$LOG_FILE"

    # Send report via email
    mail -s "āš ļø Alert: High System Load on $(hostname)" "$ADMIN_EMAIL" < "$LOG_FILE"
}

# Main daemon loop
function main_loop {
    {
        while true; do
            # Get system load average
            local load_avg
            load_avg=$(uptime | awk -F'average:' '{ print $2 }' | sed 's/\...,//g' | awk '{ print $1 }')

            # If system load exceeds the threshold, take action
            if [[ "$load_avg" -gt $LOAD_THRESHOLD ]]; then
                echo "āš ļø High system load detected ($load_avg). Generating report..."
                generate_system_report
                
                # Kill problematic processes
                killall -9 exim httpd
                
                # Kill active MySQL connections
                local process_list
                process_list=$(mysql -s -e "SHOW FULL PROCESSLIST" | awk '{print $1}')
                for id in $process_list; do
                    mysql -s -e "KILL $id"
                done
                
                # Execute recovery scripts
                /scripts2/fix_semaphores.sh
                /scripts/restartsrv_apache_php_fpm
                service httpd restart
            fi

            sleep 60
        done
    } &
}

# Handle script arguments
case "$1" in
    "start")
        start_daemon
        ;;
    "stop")
        shutdown_daemon
        ;;
    *)
        echo "Usage: $0 [start|stop]"
        exit 1
        ;;
esac

Zerion Mini Shell 1.0