Назад | Перейти на главную страницу

Сценарий оболочки для сканирования слишком большого размера каталогов и электронной почты

Я сейчас на работе, и начальство попросило меня написать / найти сценарий оболочки для версии Red Hat Server, который проверяет размер папки, и если он превышает определенный предел, он отправит электронное письмо. Может ли кто-нибудь здесь помочь мне найти или помочь мне создать такой сценарий ??

Я благодарю вас заранее,

Джаякришнан Т

Вы уже используете 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, если хотите.

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

РАЗМЕР должен быть указан в байтах!

Этот ответ основан на моем конкретном необходимом каталоге, но вы можете легко изменить его, чтобы он соответствовал любому имени тома или даже нескольким томам. Я не очень хорошо разбираюсь в сценариях и адаптировал некоторые функции, которые нашел, было бы хорошо увидеть ответы с улучшением. Спасибо

Скрипт проверит размер / 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

Я бы подумал что inotifywait (1) из инструменты inotify было бы полезно здесь.