Un script Shell pentru a trimite o alertă prin e-mail când memoria scade


Un aspect puternic al programelor shell Unix/Linux, cum ar fi bash, este suportul lor uimitor pentru constructele comune de programare care vă permit să luați decizii, să executați comenzi în mod repetat, să creați funcții noi și multe altele. Puteți scrie comenzi într-un fișier cunoscut sub numele de script shell și le puteți executa colectiv.

Acest lucru vă oferă un mijloc fiabil și eficient de administrare a sistemului. Puteți scrie scripturi pentru a automatiza sarcini, de exemplu backup-uri zilnice, actualizări de sistem etc; creați noi comenzi/utilități/instrumente personalizate și nu numai. Puteți scrie scripturi care să vă ajute să țineți pasul cu ceea ce se întâmplă pe un server.

Una dintre componentele critice ale unui server este memoria (RAM), aceasta are un impact foarte mare asupra performanței generale a unui sistem.

În acest articol, vom partaja un script shell mic, dar util, pentru a trimite un e-mail de alertă unuia sau mai multor administratori de sistem, dacă memoria serverului se epuizează.

Acest script este deosebit de util pentru a urmări Linux VPS (Servere private virtuale) cu o cantitate mică de memorie, să zicem de aproximativ 1 GB ( aproximativ 990 MB).

Configurarea mediului de testare

  1. Un server de producție CentOS/RHEL 7 cu utilitarul mailx instalat cu un server de e-mail postfix funcțional.

Acesta este modul în care funcționează scriptul alertmemory.sh: mai întâi verifică dimensiunea memoriei libere, apoi determină dacă cantitatea de memorie liberă este mai mică sau egală cu o dimensiune specificată (100 MB în scopul acestui ghid), folosit ca punct de referință pentru cea mai puțin acceptabilă dimensiune de memorie liberă.

Dacă această condiție este adevărată, va genera o listă cu primele 10 procese care consumă RAM de server și va trimite un e-mail de alertă la adresele de e-mail specificate.

Notă: va trebui să faceți câteva modificări la script (în special utilitarul expeditorului de e-mail, utilizați semnalizatoarele adecvate) pentru a îndeplini cerințele dvs. de distribuție 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

După ce ați creat scriptul /etc/scripts/alertmemory.sh, faceți-l executabil și faceți un link simbolic către cron.hourly.


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

Aceasta înseamnă că scriptul de mai sus va fi rulat după fiecare 1 oră, atâta timp cât serverul rulează.

Sfat: puteți testa dacă funcționează conform intenției, puteți seta valoarea de referință puțin mai mare pentru a declanșa cu ușurință trimiterea unui e-mail și puteți specifica un interval mic de aproximativ 5 minute.

Apoi continuați să verificați din linia de comandă folosind comanda gratuită furnizată în script. Odată ce confirmați că funcționează, definiți valorile reale pe care doriți să le utilizați.

Mai jos este o captură de ecran care arată un exemplu de e-mail de alertă.

Asta e tot! În acest articol, am explicat cum să utilizați scriptul shell pentru a trimite e-mailuri de alertă administratorilor de sistem în cazul în care memoria serverului (RAM) este epuizată. Ne puteți împărtăși orice gânduri legate de acest subiect prin intermediul formularului de feedback de mai jos.