To develop a Unix shell script to monitor system resources (CPU, memory, disk usage) on multiple Unix servers
2 min readJul 14, 2024
#!/bin/bash
# Define thresholds
CPU_THRESHOLD=80
MEM_THRESHOLD=80
DISK_THRESHOLD=80
# Define list of servers
SERVERS=("server1" "server2" "server3")
# Define alert function
send_alert() {
local message=$1
echo "Alert: $message" | mail -s "Resource Alert" your_email@example.com
}
# Function to check resources on a server
check_resources() {
local server=$1
# Get CPU usage
CPU_USAGE=$(ssh $server "top -bn1 | grep 'Cpu(s)' | sed 's/.*, *\([0-9.]*\)%* id.*/\1/' | awk '{print 100 - \$1}'")
# Get Memory usage
MEM_USAGE=$(ssh $server "free | grep Mem | awk '{print \$3/\$2 * 100.0}'")
# Get Disk usage
DISK_USAGE=$(ssh $server "df / | grep / | awk '{print \$5}' | sed 's/%//'")
# Check CPU usage
if (( $(echo "$CPU_USAGE > $CPU_THRESHOLD" | bc -l) )); then
send_alert "CPU usage on $server is above threshold: ${CPU_USAGE}%"
fi
# Check Memory usage
if (( $(echo "$MEM_USAGE > $MEM_THRESHOLD" | bc -l) )); then
send_alert "Memory usage on $server is above threshold: ${MEM_USAGE}%"
fi
# Check Disk usage
if (( $DISK_USAGE > $DISK_THRESHOLD )); then
send_alert "Disk usage on $server is above threshold: ${DISK_USAGE}%"
fi
}
# Iterate over the list of servers and check resources
for server in "${SERVERS[@]}"; do
check_resources $server
done
Option -2
#!/bin/bash
# Define thresholds (adjust as needed)
cpu_threshold=80
memory_threshold=85
disk_threshold=90
# Server list (replace with your server IPs)
server_list=(server1 server2 server3)
for server in "${server_list[@]}"; do
# Get server info
server_info=$(get_server_info "$server")
# Extract resource usage
cpu_usage=$(echo "$server_info" | grep CPU | awk '{print $2}')
memory_usage=$(echo "$server_info" | grep Mem | awk '{print $3}')
disk_usage=$(echo "$server_info" | grep root | awk '{print $5}')
# Check and send alerts
check_cpu_usage "$cpu_usage"
check_memory_usage "$memory_usage"
check_disk_usage "$disk_usage"
done