Удаление старых записей разговоров asterisk, важная тема, если диск не "резиновый". Количество хранимых записей разговоров в Asterisk ограничено только размером дискового пространства. Но что мы будем делать, когда место на диске закончиться. Для удаления записи разговоров, можно написать скрипт, который по расписанию планировщика cron, будет удалять файлы старше чем X дней, а также удалять пустые директории.
На сегодняшний момент, у меня установлен из исходников asterisk-1.8.32.2 + freepbx-2.11.0.42. Как выяснилось, после удаления файлов в статистике freepbx уже не показывает микрофончик ,так как там просто проверка на наличие файла.
Чтобы удалить записи, надо написать скрипт bash
Вариант №1
#!/bin/bash
#Удалить файлы в указаной директории старше чем 15 дней, с расширением wav
find /var/spool/asterisk/monitor/ -name '*.wav' -mtime +15 -delete
#Удалить в указаной директории пустые каталоги
cd /var/spool/asterisk/monitor/
find -depth -type d -empty -exec rmdir {} \;
Вариант №2
#!/bin/bash
# путь к хранилищу записей
RECORDINGS=/var/spool/asterisk/monitor
# Количество дней для сохранения
RECORDINGEXPIRY=14
# Количество дней хранения логов очистки
LOGEXPIRY=5
# Текущая дата
DATE=`date "+%Y-%m-%d_%H:%M:%S"`
# Удаляются записи старше чем $EXPIRY дней
find $RECORDINGS -mtime +$RECORDINGEXPIRY -exec rm -rfv {} \; > /var/spool/asterisk/del_logs/removal-$DATE.log
# Удаляются логи старше чем $LOGEXPRY дней
find /var/spool/asterisk/del_logs -mtime +$LOGEXPIRY -exec rm -f {} \;
#Удалить в указаной директории пустые каталоги
cd $RECORDINGS {} \;
find -depth -type d -empty -exec rmdir {} \;
Что бы удалять записи автоматически, добавим выполнение этого файла по расписанию в планировщик заданий cron
Так же удаляем записи о разговорах из БД MySQL
Создадим файл, который в дальнейшем добавим в планировщик заданий cron
delete_bd_mysql_asteriskcdr.sh
#!/bin/bash
#
MYSQL_USER="root" # Имя пользователя MySQL
MYSQL=/usr/bin/mysql # Расположение MySQL (whereis mysql)
MYSQLCHECK=/usr/bin/mysqlcheck # Расположение MySQLcheck (whereis mysqlcheck)
MYSQL_PASSWORD="passwd" # Пароль пользователя MySQL
EMAIL="admin@mydomain" # Почтовый адрес для уведомлений
TYPE="DAY" # Интервал времени (SECOND,MINUTE,HOUR,DAY,MONTH,YEAR)
NUMBER="34" # Количество (34 дней)
#
#
########## Удаление старых записей из БД asteriskcdrdb.cdr ##########
#
# Чистим asteriskcdrdb.cdr
#
if $MYSQL -u$MYSQL_USER -p$MYSQL_PASSWORD -e "delete from asteriskcdrdb.cdr where calldate < DATE_SUB(NOW(), interval $NUMBER $TYPE);"; then
echo "Старые записи из БД asteriskcdrdb.cdr успешно удалены" | mail -s "MySQL asteriskcdrdb.cdr del YES" $EMAIL
else
echo "Не удалось удалить старые записи из asteriskcdrdb.cdr" | mail -s "MySQL asteriskcdrdb.cdr del NO" $EMAIL
exit 0
fi
#
# Чистим asteriskcdrdb.cel
#
if $MYSQL -u$MYSQL_USER -p$MYSQL_PASSWORD -e "delete from asteriskcdrdb.cel where eventtime < DATE_SUB(NOW(), interval $NUMBER $TYPE);"; then
echo "Старые записи из БД asteriskcdrdb.cel успешно удалены" | mail -s "MySQL asteriskcdrdb.cel del YES" $EMAIL
else
echo "Не удалось удалить старые записи из asteriskcdrdb.cel" | mail -s "MySQL asteriskcdrdb.cel del NO" $EMAIL
exit 0
fi
#
# Оптимизируем asteriskcdrdb
#
if $MYSQLCHECK -u$MYSQL_USER -p$MYSQL_PASSWORD --optimize asteriskcdrdb; then
echo "БД asteriskcdrdb успешно оптимизирована" | mail -s "MySQL asteriskcdrdb optimYES" $EMAIL
else
echo "Не удалось оптимизировать БД asteriskcdrdb" | mail -s "MySQL asteriskcdrdb optim NO" $EMAIL
exit 0
fi
#