This page is hosted for free by zzz.com.ua, if you are owner of this page, you can remove this message and gain access to many additional features by upgrading your hosting to PRO or VIP for just 32.50 UAH.

Телефония - Asterisk

Не работает? Начинай читать инструкцию.

Удаление старых записей разговоров asterisk

Удаление старых записей разговоров 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
#

Предлагаю ознакомиться с предложениями моих партнёров