网站搜索

内存不足时发送电子邮件警报的 Shell 脚本


Unix/Linux shell 程序(例如 bash)的一个强大方面是它们对常见编程结构的惊人支持,使您能够做出决策、重复执行命令、创建新函数等等。您可以在称为 shell 脚本的文件中编写命令并集中执行它们。

这为您提供了可靠且有效的系统管理方法。您可以编写脚本来自动执行任务,例如每日备份、系统更新等;创建新的自定义命令/实用程序/工具等等。您可以编写脚本来帮助您跟上服务器上正在发生的事情。

服务器的关键组件之一是内存(RAM),它极大地影响系统的整体性能。

在本文中,我们将分享一个小但有用的 shell 脚本,用于在服务器内存不足时向一个或多个系统管理员发送警报电子邮件。

该脚本对于监视内存量较小(例如大约1GB)的Linux VPS虚拟专用服务器)特别有用(大约990MB)。

测试环境搭建

  1. 一个 CentOS/RHEL 7 生产服务器,带有 mailx 实用程序,安装了可工作的 postfix 邮件服务器。

这就是 alertmemory.sh 脚本的工作原理:首先检查可用内存大小,然后确定可用内存量是否小于或等于指定大小(100 MB)出于本指南的目的),用作最小可接受的可用内存大小的基准。

如果此条件成立,它将生成消耗服务器 RAM 的前 10 个进程的列表,并向指定的电子邮件地址发送警报电子邮件。

注意:您必须对脚本进行一些更改(尤其是邮件发送实用程序,使用适当的标志)以满足您的 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

创建脚本 /etc/scripts/alertmemory.sh 后,使其可执行并符号链接到 cron.hourly。


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

这意味着只要服务器正在运行,上述脚本就会每 1 小时运行一次。

提示:您可以测试它是否按预期工作,将基准值设置得高一点以轻松触发发送电子邮件,并指定一个较小的间隔约5分钟。

然后使用脚本中提供的 free 命令继续从命令行进行检查。一旦确认其正常工作,请定义您想要使用的实际值。

下面是显示示例警报电子邮件的屏幕截图。

就这样!在本文中,我们解释了如何使用 shell 脚本在服务器内存 (RAM) 不足的情况下向系统管理员发送警报电子邮件。您可以通过下面的反馈表与我们分享与此主题相关的任何想法。