Была необходимость отслеживания состояния свободного места на
диске и отсутствием необходимости ручной очистки самых старых
директорий. Данный диск был выделен под удаленные из файлового хранилища
файлы. Ежедневно автоматически создавалась директория с именем даты в
формате ГГГГ-ММ-ДД. Имеющийся способ через find мне не очень понравился,
так как он получался значительно медленнее и более ресурсоемким и так
как используются временные метки создания или последней модификации
удалиться могло даже за более поздние даты. Поэтому и появилась
необходимость подобного скрипта.
Скрипт разработан для линукс.
Данный скрипт так же ведет логи в случае если необходимо отслеживать когда был запуск и каков результат запуска.
Скрипт можно запускать через cron. Весьма удобно
Для удобства выложил готовый файл в архиве
[sipo2 ~]$ cat auto-clean.sh
#!/bin/bash
disk_vol=/mnt/del #путь к разделу или подключенному сетевому диску
share_path=/mnt/del #путь к директории в которой лежит удаленный контент
max_del_dir=2 #сколько удалять самых старых (первых - сортировка по имени) Директорий
disk_need_free=35 #Не менее скольки должно быть свободно
log_file=auto-clean.log #Имя лог файла
path_log_file=/mnt/del #Путь к лог-файлу
#------------сам скрипт----------------
#Задается дата и время запуска в переменную для записи в лог файл о выполнении
real_time_date=`date`
#Выполняется проверка на наличие ЛОГ-файла в указанном выше месте
if [ ! -e $path_log_file/$log_file ];
then
#Создается в случае отсутствия
touch $path_log_file/$log_file
fi
if [ `df -h $disk_vol | grep [0-9]G |cut -d'G' -f3` -le $disk_need_free ];
then
#echo "${real_time_date}-${disk_need_free}" > $path_log_file/$log_file
dir_list=`ls $share_path | head -n $max_del_dir`
echo "${real_time_date}-${dir_list}" >> $path_log_file/$log_file
rm -rvf $share_path/$dir_list >> $path_log_file/$log_file
else
echo "${real_time_date} disk space free>${disk_need_free}G" >> $path_log_file/$log_file
exit 0
Вложение | Размер |
---|---|
auto-clean.sh_.bz2 | 720 байт |