Ricerca nel sito web

Uno script Shell per inviare un avviso e-mail quando la memoria diventa insufficiente


Un aspetto potente dei programmi shell Unix/Linux come bash è il loro straordinario supporto per i costrutti di programmazione comuni che ti consentono di prendere decisioni, eseguire comandi ripetutamente, creare nuove funzioni e molto altro ancora. Puoi scrivere comandi in un file noto come script di shell ed eseguirli collettivamente.

Questo offre un mezzo affidabile ed efficace per l'amministrazione del sistema. Puoi scrivere script per automatizzare le attività, ad esempio backup giornalieri, aggiornamenti di sistema, ecc.; creare nuovi comandi/utilità/strumenti personalizzati e altro ancora. Puoi scrivere script per aiutarti a tenere il passo con ciò che si svolge su un server.

Uno dei componenti critici di un server è la memoria (RAM), che ha un notevole impatto sulle prestazioni generali di un sistema.

In questo articolo condivideremo un piccolo ma utile script di shell per inviare un'e-mail di avviso a uno o più amministratori di sistema se la memoria del server è in esaurimento.

Questo script è particolarmente utile per tenere d'occhio Linux VPS (Virtual Private Server) con una piccola quantità di memoria, diciamo di circa 1GB ( circa 990MB).

Configurazione dell'ambiente di test

  1. Un server di produzione CentOS/RHEL 7 con l'utilità mailx installata con un server di posta Postfix funzionante.

Ecco come funziona lo script alertmemory.sh: prima controlla la dimensione della memoria libera, quindi determina se la quantità di memoria libera è inferiore o uguale alla dimensione specificata (100 MB ai fini di questa guida), utilizzato come punto di riferimento per la dimensione di memoria libera meno accettabile.

Se questa condizione è vera, genererà un elenco dei primi 10 processi che consumano la RAM del server e invierà un'e-mail di avviso agli indirizzi e-mail specificati.

Nota: dovrai apportare alcune modifiche allo script (in particolare all'utilità del mittente della posta, utilizza i flag appropriati) per soddisfare i requisiti della tua distribuzione Linux.


#!/bin/bash 
#######################################################################################
#Script Name    :alertmemory.sh
#Description    :send alert mail when server memory is running low
#Args           :       
#Author         :Aaron Kili Kisinga
#Email          :[email 
#License       : GNU GPL-3	
#######################################################################################
## declare mail variables
##email subject 
subject="Server Memory Status Alert"
##sending mail as
from="[email "
## sending mail to
to="[email "
## send carbon copy to
also_to="[email "

## get total free memory size in megabytes(MB) 
free=$(free -mt | grep Total | awk '{print $4}')

## check if free memory is less or equals to  100MB
if [[ "$free" -le 100  ]]; then
        ## get top processes consuming system memory and save to temporary file 
        ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head >/tmp/top_proccesses_consuming_memory.txt

        file=/tmp/top_proccesses_consuming_memory.txt
        ## send email if system memory is running low
        echo -e "Warning, server memory is running low!\n\nFree memory: $free MB" | mailx -a "$file" -s "$subject" -r "$from" -c "$to" "$also_to"
fi

exit 0

Dopo aver creato il tuo script /etc/scripts/alertmemory.sh, rendilo eseguibile e collegalo simbolicamente a cron.hourly.


chmod +x /etc/scripts/alertmemory.sh
ln -s -t /etc/cron.hourly/alertmemory.sh /etc/scripts/alertmemory.sh

Ciò significa che lo script precedente verrà eseguito ogni 1 ora finché il server è in esecuzione.

Suggerimento: puoi verificare se funziona come previsto, impostare il valore di benchmark un po' alto per attivare facilmente l'invio di un'e-mail e specificare un breve intervallo di circa 5 minuti.

Quindi continua a controllare dalla riga di comando utilizzando il comando gratuito fornito nello script. Una volta confermato che funziona, definisci i valori effettivi che desideri utilizzare.

Di seguito è riportato uno screenshot che mostra un esempio di email di avviso.

È tutto! In questo articolo, abbiamo spiegato come utilizzare lo script di shell per inviare e-mail di avviso agli amministratori di sistema nel caso in cui la memoria del server (RAM) sia in esaurimento. Puoi condividere con noi qualsiasi pensiero relativo a questo argomento tramite il modulo di feedback riportato di seguito.