Пожалуйста, войдите здесь. Часто задаваемые вопросы О нас
Задайте Ваш вопрос

Скрипт удаления старых файлов при переполнении диска

0

Всем привет.

Я сообразил скриптик, который будет удалять N старых файлов при переполнении диска. Так как софт, который я использую бесплатный, то ... вот скрипт.

И хотел бы, что бы тем кому он нужен он пригодился, а те кто сможет его доработать, те написали как это сделать.

#!/bin/sh

#Скрипт удаления старых файлов при переполнении диска
# $1 - доспустимый размер занятого места в процентах, например 90, без знака процентов %    
# $2 - точка монтирования, например /var 
# $3 - имя каталога для очистки старых файлов, например /var/spool/asterisk/monitor/
# $4 - количество удаляемых файлов
# запускать так sh remove-old.sh 85 /var /var/spool/asterisk/monitor/ 1000
# Скрипт создал BAF mail: ya.baf28@yandex.kz tel: 87054516620
# @daily /var/lib/asterisk/bin/remove-old.sh 85 /var /var/spool/asterisk/monitor/ 1000 >> /var/log/asterisk/remove-old.log 2>&1

if [ "$#" -eq 4 ]
   then

#Определяем переменные из аргуметов переданных скрипту
NOT_MORE_PERCENT=$1
MOUNT_POINT=$2
TARGET_DIRECTORY=$3
N_FILES=$4

#Выводим дату начала очистки диска
DATE=`date "+%F %T"`
echo "$DATE приступаю к очистки диска"

#Определяем процент занятого места на диске по точке монтирования этого диска
REAL_PERCENT=$(df -h | grep $MOUNT_POINT | awk '{print $5}' | sed 's/.$//')

#В случае если реальный процент больше или равен заданному значению удаляем лишние файлы
if [ "$REAL_PERCENT" -ge "$NOT_MORE_PERCENT" ]
 then

#Находим файлы и удаляем последние N штук
find $TARGET_DIRECTORY -type f | sort -r | tail -n $4 | xargs -i rm -rf '{}'

#Находим все пустые директории в заданной директории и удаляем
find $TARGET_DIRECTORY -type d -empty | xargs -i rm -rf '{}'

  else
#В случае если реальный процент меньше заданного значения ничего не делаем
DATE=`date "+%F %T"`
  echo "$DATE очистка диска не требуется"
  exit 0
fi

#Вывожу дату и время окончания очистки диска
DATE=`date "+%F %T"`
  echo "$DATE очистка диска закончена"

 else
echo "Количество аргументов должно быть равно 4-м"
echo "Введенное количество аргуметов $#"
echo "###################################################"
echo "Пример использования: remove-old.sh 85 /var /var/spool/asterisk/monitor/ 1000"
echo "Первый параметр доспустимый размер занятого места в процентах, например 90, без знака процентов %"
echo "Второй параметр точка монтирования, например /var"
echo "Третий параметр имя каталога для очистки старых файлов, например /var/spool/asterisk/monitor/"
echo "Четвертый параметр количество удаляемых файлов"
exit 1
fi

exit 0
удалить закрыть спам изменить тег редактировать

спросил 2018-10-24 11:08:58 +0400

baf28 Gravatar baf28
11 7 3 4

обновил 2018-10-24 11:11:28 +0400

Comments

строчка 33 и 36 поставь * вот так $TARGET_DIRECTORY* иначе удалит папку monitor если она окажется пустой ну или папку назначения

baf28 ( 2018-10-25 07:01:46 +0400 )редактировать

1 Ответ

1

Как вы думаете, что произойдет если на вас будет идти DDoS и у вас станет /var/log/asterisk/messages ну гдето под пол терабайта?

Сначала удалится "старые" Потом "не очень старые". Потом...

в общем, опасный скрипт. Просто делаете простой rotate и удаляйте "старше XX дней".

ссылка удалить спам редактировать

ответил 2018-10-24 16:22:50 +0400

meral Gravatar meral flag of Ukraine
23347 24 20 177
http://pro-sip.net/

Comments

согласен с вами. тут есть что добавить. старшше х дней не рационально использует диск, так как расчитать сколько в день поступает звонков даже примерно для меня нереально. а поп поводу переполнения из-за других файлов, то я всегда монтирую папку monitor на отдельный диск, поэтому такой беды не произойдет, а еще можно ротировать туже messages не по времени а по размеру и держать небольшое количество. Ну и у меня никода не было ддос атак или что-то подобного, не тот уровень )))

baf28 ( 2018-10-25 07:00:21 +0400 )редактировать

для этого не надо уроаень. боты-с

meral ( 2018-10-25 23:43:36 +0400 )редактировать

как я понимаю этот скрипт задумывался для удаления записей разговоров и не более того, для этой цели он вполне подходит - только наверное еще и БД чистить надо тогда.

Zavr2008 ( 2018-10-29 15:42:27 +0400 )редактировать

вот БД как чистить понятия не имею, буду рад если подскажите

baf28 ( 2018-11-13 05:10:36 +0400 )редактировать

удалять старый записи из asteriskcdrdb.cdr(в новых версиях еще и asteriskcdrdb.cel), purge binary logs.

meral ( 2018-11-13 06:45:33 +0400 )редактировать

акутально, если количество звонков больше 20-30к в день. Для вас, я так понимаю, не актуально.

meral ( 2018-11-13 06:46:35 +0400 )редактировать

Ваш ответ

Please start posting your answer anonymously - your answer will be saved within the current session and published after you log in or create a new account. Please try to give a substantial answer, for discussions, please use comments and please do remember to vote (after you log in)!
[скрыть предварительный просмотр]

Закладки и информация

Добавить закладку

подписаться на rss ленту новостей

Статистика

Задан: 2018-10-24 11:08:58 +0400

Просмотрен: 799 раз

Обновлен: Oct 24 '18

Похожие вопросы:

Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией GNU GPL.