Я сейчас на работе, и начальство попросило меня написать / найти сценарий оболочки для версии Red Hat Server, который проверяет размер папки, и если он превышает определенный предел, он отправит электронное письмо. Может ли кто-нибудь здесь помочь мне найти или помочь мне создать такой сценарий ??
Я благодарю вас заранее,
Джаякришнан Т
Вы уже используете Nagios?
Проверьте check_dirsize или check_filesize_dir:
Оба могут быть легко адаптированы для работы с 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 было бы полезно здесь.