Et shell-script til at sende e-mail-alarm, når hukommelsen bliver lav


Et kraftfuldt aspekt af Unix/Linux shell-programmer såsom bash er deres fantastiske understøttelse af almindelige programmeringskonstruktioner, der gør det muligt for dig at træffe beslutninger, udføre kommandoer gentagne gange, oprette nye funktioner og så meget mere. Du kan skrive kommandoer i en fil kendt som et shell-script og udføre dem samlet.

Dette giver dig et pålideligt og effektivt middel til systemadministration. Du kan skrive scripts for at automatisere opgaver, f.eks. Daglige sikkerhedskopier, systemopdateringer osv. Opret nye brugerdefinerede kommandoer/hjælpeprogrammer/værktøjer og videre. Du kan skrive scripts for at hjælpe dig med at holde øje med, hvad der udfolder sig på en server.

En af de kritiske komponenter på en server er hukommelse (RAM), det påvirker i høj grad systemets samlede ydelse.

I denne artikel deler vi et lille, men nyttigt shell-script til at sende en alarm-e-mail til en eller flere systemadministratorer, hvis serverhukommelsen er ved at løbe tør.

Dette script er især nyttigt til at holde øje med Linux VPS (Virtual Private Servers) med en lille mængde hukommelse, f.eks. Omkring 1 GB (ca. 990 MB).

  1. En CentOS/RHEL 7-produktionsserver med mailx-værktøj installeret med fungerende postfix-mailserver.

Sådan fungerer scriptet alarmmemory.sh: først kontrolleres det fri hukommelsesstørrelse, og derefter bestemmes, om mængden af ledig hukommelse er mindre eller lig med en bestemt størrelse (100 MB i denne vejlednings formål), brugt som et benchmark for mindst acceptabel fri hukommelsesstørrelse.

Hvis denne betingelse er sand, genererer den en liste over de 10 bedste processer, der bruger server-RAM og sender en alarm-e-mail til specificerede e-mail-adresser.

Bemærk: Du bliver nødt til at foretage et par ændringer i scriptet (især mail-afsenderprogrammet, brug de relevante flag) for at opfylde dine Linux-distributionskrav.

#!/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

Når du har oprettet dit script /etc/scripts/alertmemory.sh, skal du gøre det eksekverbart og symlink til cron.hourly.

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

Dette betyder, at ovenstående script køres efter hver 1 time, så længe serveren kører.

Tip: Du kan teste, om det fungerer som beregnet, indstille benchmarkværdien lidt højt for let at udløse en e-mail, der skal sendes, og angive et lille interval på ca. 5 minutter.

Fortsæt derefter med at kontrollere fra kommandolinjen ved hjælp af den gratis kommando, der findes i scriptet. Når du har bekræftet, at det fungerer, skal du definere de faktiske værdier, du vil bruge.

Nedenfor er et skærmbillede, der viser en prøvealarm-e-mail.

Det er alt! I denne artikel forklarede vi, hvordan du bruger shell-script til at sende alarm-e-mails til systemadministratorer, hvis serverhukommelsen (RAM) er ved at løbe tør. Du kan dele eventuelle tanker vedrørende dette emne med os via feedbackformularen nedenfor.