LINUX.ORG.RU

Записи разговоров asterisk переполнили диск.

 


0

1

Не остается свободного места - записи хранятся уже очень долго, пару лет, удаление вовремя настроено не было. Накопилось очень много - к миллиону. Как почистить?

Гугленье дало следующие варианты:
1
#!/bin/bash
# Указываем директорию где расположены файлы
RECORDINGS=/var/spool/asterisk/monitor
# Указываем период за какой срок удалять файлы записи
RECORDINGEXPIRY=14
# Указываем за какой срок хранить логи
LOGEXPIRY=365
# Дата
DATE=`date`
# Удаляем записи старше $RECORDINGEXPIRY дней
find $RECORDINGS -mtime +$RECORDINGEXPIRY -exec rm -rfv > removal-$DATE.log
# Удаляем логи старше $LOGEXPRY
find . -mtime +$LOGEXPIRY -exec rm -rf

В ответ получаем:
find: отсутствует аргумент у `-exec'

2
попроще:
bash /usr/bin/find /var/spool/asterisk/monitor/*.wav -mtime 365 -delete
Ответ после нескольких минут:"-bash: /bin/bash: Слишком длинный список аргументов"

3
find /var/spool/asterisk/monitor/* -mtime +365 -exec rm {} \;
Аналогичный ответ: "-bash: /usr/bin/find: Слишком длинный список аргументов"

Как вычистить эти файлики?

удаление вовремя настроено не было.

# /etc/cron.d/asterisk

# * * * * * выполняемая команда
# - - - - -
# | | | | |
# | | | | ----- День недели (0 - 7) (Воскресенье =0 или =7)
# | | | ------- Месяц (1 - 12)
# | | --------- День (1 - 31)
# | ----------- Час (0 - 23)
# ------------- Минута (0 - 59)
# Удаляем файлы старше 180 дней
#0 * * * *       root find /var/spool/asterisk/monitor/ -mtime +180 -delete;
# Удаляем файлы старше 5 дней
0 * * * *       root find /var/spool/asterisk/monitor/ -mtime +5 -delete

petav ★★★★★ ()
Последнее исправление: petav (всего исправлений: 3)

Попробуй уменьшить выборку - удалить те что старше 500 дней, например.

Deleted ()

bash /usr/bin/find /var/spool/asterisk/monitor/*.wav

find /var/spool/asterisk/monitor/ -name «*.wav»

yoghurt ★★★★★ ()

насколько я понял из справки
-mtime смотрит файлы которые старше указанного периода.

Если у тебя там много файлов старше 565 дней find не может их определить все...

период в 1000 дней поставь или больше, проверь как будет.

doctor-ua ()
Ответ на: комментарий от stabst

предполагаю что «Слишком длинный список аргументов» для find означает, что данная команда не может обработать такое количество файлов к примеру больше 100 тыс. шт. старше 365дн.

если можно указать количество удаляемых файлов, то так можно выйти из ситуации указав удалить 5тыс. файлов старше 365дн.

Что бы find не срывало «башню».

doctor-ua ()
Ответ на: комментарий от stabst

find /var/spool/asterisk/monitor/ -mtime +360 -delete

Через четыре часа команда молча прекратила работать. Свободного объема не прибавилось.

Попробую изменить +360 на +600 что ли...

stabst ()
Ответ на: комментарий от stabst

Неа, ничего не меняется.

посчитал количество файлов с помощью ls |wc -l. 1181043!!!

Вопрос остается открытым - как вычистить эти авгиевы конюшни?

stabst ()
Ответ на: комментарий от stabst

ИМХО find не копит список для exec-a, а выполняет действие
для каждого найденного. Может что-то не так с аргументами?
Выцепи одно имя файла и скорми его find-у
У меня есть батничек, вроде то-же самое:
/usr/bin/find «$backup_dir» -maxdepth 1 -name «$db_name»'*.*' -mtime +30 -type f -exec /bin/rm -f {} \;
Они нужны кому, может rm сделать ?
Ночью жму в mp3, места меньше занимают.

Vasily22 ()
Ответ на: комментарий от Vasily22

3
find /var/spool/asterisk/monitor/* -mtime +365 -exec rm {} \;
Аналогичный ответ: "-bash: /usr/bin/find: Слишком длинный список аргументов"
зездочку надо экранировать, шелл ее раскручивает, find-у уже список длинный попадает.

Vasily22 ()
Ответ на: комментарий от Vasily22

Вот чем посоветовали воспользоваться. Можно прокомментировать незакомментаренные строчки скрипта? Он перепаковывает в мп3, а потом что, удаляет waw? Как его поправить, чтобы просто удалил все за определенный месяц, например?
for i in `seq -w 01 08` - 'это с января по сентябрь?

#!/bin/bash
cd /var/spool/asterisk/monitor/
for i in `seq -w 01 08`
do

filenames=`echo OUT???-2014${i}*.wav`
for filename in `echo ${filenames}`
do
find . -name «${filename}» -exec lame '{}' ';' -exec rm -f
'{}' ';' # find . -atime -1 -name '2014$i*.wav' -exec lame '{}' ';' -exec rm -f '{}' ';'
# find . -name «${filename}» -exec bash -c 'mv $0 ${0/.mp3/.wav}' {} \;
done

filenames=`echo OUT???-2014${i}*.mp3`

for filename in `echo ${filenames}`
do
# find . -name «${filename}» -exec lame '{}' ';' -exec rm -f '{}' ';'
# find . -atime -1 -name '2014$i*.wav' -exec lame '{}' ';' -exec rm -f '{}' ';'
find . -name «${filename}» -exec bash -c 'mv $0 ${0/.mp3/.wav}' {} \;
done
done
exit 0

stabst ()
Ответ на: комментарий от stabst
Ответ на: комментарий от Vasily22

Да, все правильно, экранированная звездочка сработала.

stabst ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.