Vyhledávání na webu

Skript Shell pro odeslání e-mailového upozornění, když dojde k nedostatku paměti


Silným aspektem unixových/linuxových shell programů, jako je bash, je jejich úžasná podpora pro běžné programovací konstrukce, které vám umožňují dělat rozhodnutí, opakovaně provádět příkazy, vytvářet nové funkce a mnoho dalšího. Příkazy můžete zapisovat do souboru známého jako skript shellu a spouštět je společně.

To vám nabízí spolehlivý a efektivní způsob správy systému. Můžete psát skripty pro automatizaci úloh, například denní zálohování, aktualizace systému atd.; vytvářet nové vlastní příkazy/utility/nástroje a další. Můžete psát skripty, které vám pomohou udržet krok s tím, co se na serveru odehrává.

Jednou z kritických součástí serveru je paměť (RAM), která výrazně ovlivňuje celkový výkon systému.

V tomto článku se podělíme o malý, ale užitečný skript shellu, který odešle e-mail s upozorněním jednomu nebo více správcům systému, pokud dochází paměť serveru.

Tento skript je zvláště užitečný pro sledování Linux VPS (Virtual Private Servers) s malým množstvím paměti, řekněme asi 1 GB ( přibližně 990 MB).

Nastavení testovacího prostředí

  1. Produkční server CentOS/RHEL 7 s nainstalovaným nástrojem mailx s funkčním poštovním serverem Postfix.

Skript alertmemory.sh funguje takto: nejprve zkontroluje velikost volné paměti a poté určí, zda je množství volné paměti menší nebo rovno zadané velikosti (100 MB pro účely této příručky), který se používá jako referenční hodnota pro nejméně přijatelnou velikost volné paměti.

Pokud je tato podmínka pravdivá, vygeneruje se seznam 10 hlavních procesů spotřebovávajících RAM serveru a odešle se na zadané e-mailové adresy e-mail s upozorněním.

Poznámka: Budete muset provést několik změn ve skriptu (zejména v nástroji pro odesílání pošty, použijte příslušné příznaky), abyste splnili požadavky distribuce Linuxu.


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

Po vytvoření skriptu /etc/scripts/alertmemory.sh jej udělejte spustitelným a vytvořte symbolický odkaz na cron.hourly.


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

To znamená, že výše uvedený skript se bude spouštět každou 1 hodinu, dokud server běží.

Tip: Můžete otestovat, zda funguje tak, jak bylo zamýšleno, nastavit srovnávací hodnotu trochu vysoko, aby se snadno spustilo odeslání e-mailu, a určit malý interval asi 5 minut.

Poté pokračujte v kontrole z příkazového řádku pomocí bezplatného příkazu poskytnutého ve skriptu. Jakmile potvrdíte, že to funguje, definujte skutečné hodnoty, které chcete použít.

Níže je snímek obrazovky s ukázkovým e-mailem s upozorněním.

To je vše! V tomto článku jsme vysvětlili, jak používat skript shellu k odesílání varovných e-mailů správcům systému v případě, že dochází serverová paměť (RAM). Pomocí níže uvedeného formuláře zpětné vazby se s námi můžete podělit o jakékoli myšlenky týkající se tohoto tématu.