用于扫描目录和电子邮件大小(如果太大)的 Shell 脚本

用于扫描目录和电子邮件大小(如果太大)的 Shell 脚本

我现在正在上班,上级要求我编写/查找一个用于 Red hat Server 版本的 shell 脚本,该脚本可以检查文件夹大小,如果超过某个限制,就会发送一封电子邮件。这里有人可以帮我找到或帮我创建这样的脚本吗??

我提前谢谢你,

Jayakrishnan T

答案1

您已经在运行 Nagios 了吗?

检查 check_dirsize 或 check_filesize_dir:

http://exchange.nagios.org/directory/Plugins/Uncategorized/Operating-Systems/Linux/CheckDirSize/details

http://exchange.nagios.org/directory/Plugins/Uncategorized/Operating-Systems/Linux/check_filesize_dir/details

如果您愿意的话,两者都可以轻松适应 cron 的运行。

答案2

#!/bin/bash
DIR=/path/to/dir
SIZE=10000
MAILADDR="[email protected]"
if [ $(du -s $DIR | awk '{print $1}') -gt $SIZE ]; then
    echo "$DIR" | mail -s "Directory limit exceeded in $DIR" $MAILADDR
fi

SIZE 必须以字节为单位!

答案3

我认为inotifywait(1)inotify 工具将会很有帮助。

答案4

这个答案是基于我需要的特定目录,但您可以轻松修改它以适应任何卷名甚至多个卷。我不是编写脚本的最佳人选,并且改编了我发现的一些功能,看到改进的响应将是一件好事。谢谢

脚本将检查 /home 的大小,如果太大,则向拥有最大目录的用户发送电子邮件。注意:任何拥有目录的非人类用户(如服务帐户)都需要使用排除列表进行排除。服务帐户不经常检查电子邮件。此脚本假设一旦头号违规者清除了所有可以清除的内容,并且磁盘超出限制,则下一次运行将找到下一个最大的磁盘占用者并向他们发送电子邮件。建议每 15 分钟运行一次,这样您就可以在用户仍处于登录状态时捕获他们。

#!/bin/bash

DISK="/home" # disk to monitor
CURRENT=$(df -h | grep ${DISK} | awk {'print $4'}) # get disk usage from monitored disk
MAX="85%" # max 85% disk usage
DOMAIN="your.com"

# functions #
function max_exceeded() {

    # Max Exceeded now find the largest offender
    cd $DISK
    for i in `ls` ; do du -s $i ; done > /tmp/mail.1
    sort -gk 1 /tmp/mail.1 | tail -1 | awk -F " " '{print $2}' > /tmp/mail.offender
    OFFENDER=`cat /tmp/mail.offender`
    echo $OFFENDER
    du -sh $DISK/$OFFENDER > /tmp/mail.over85
    mail -s "$HOSTNAME $DISK Alert!" "$OFFENDER@$DOMAIN, admin@$DOMAIN"  < /tmp/mail.over85
}

function main() {
    # check if current disk usage is greater than or equal to max usage.
    if [ ${CURRENT} ]; then
            if [ ${CURRENT%?} -ge ${MAX%?} ]; then
            # if it is greater than or equal to max usage we call our max_exceeded function and send mail
            echo "Max usage (${MAX}) exceeded. The /home disk usage is it at ${CURRENT}. Sending email."
            max_exceeded
        fi
    fi
}


# init #
main

#CLEANUP ON AISLE ONE
rm /tmp/mail.1
rm /tmp/mail.offender
rm /tmp/mail.over85

相关内容