Автоматическое удаление старых записей Asterisk

Автоматическое удаление старых записей Asterisk

Запись телефонных разговоров на IP – АТС Asterisk является безусловно важной «фичей» для любой организации. С другой стороны, с ростом количества записей уменьшается память на дисках. Рано или поздно, перед организацией встает вопрос об удалении старых файлов, для освобождения места. Мы разработали PHP скрипт, который автоматически удаляет записи разговоров (.wav) и данные в базе данных по этим звонкам старше определенного количества дней. Чтобы адаптировать его под себя, вам нужно просто указать максимальное количество дней для хранения записей.

Содержание

Скрипт автоматического удаления

Сам скрипт написан на PHP и представляет собой 23 строчки кода. Основная переменная в скрипте – days. Укажите в ней количество дней, которое вы планируете хранить записи:
$days = 180; //записи, которые старше 180 дней будут удалены. Укажите здесь количество дней для удаления;
$hostname = "localhost"; //если скрипт выполняется на том же сервере, что и IP - АТС Asterisk, то оставьте здесь localhost. В противном случае укажите IP - адрес;
$username = "delete"; //логин для подключения к базе данных asteriskcdrdb
$password = "333jIje45"; //пароль для подключения к базе данных asteriskcdrdb
$dbName = "asteriskcdrdb";
$file = '/home/admin/log_mail.txt';
$cdate =  date('Y-m-d 00:00:00', strtotime('-'.$days.' days')); //определяем максимальную дату звонка. Все звонки старше этой даты, будут удалены;
$adate = date('Y-m-d 00:00:00'); //текущая дата для записи в лог – файл;
/* создать соединение */ 
mysql_connect($hostname,$username,$password) OR DIE("Не могу создать соединение "); 
mysql_select_db($dbName) or die(mysql_error());
/* удаляем информацию о записях в таблице cdr*/ 
$query = "DELETE from cdr WHERE calldate < '$cdate';";
$res=mysql_query($query) or die(mysql_error());
/* Как много нашлось строк */ 
$number = mysql_num_rows($res); 
/* удаляем сами аудио - записи разговоров */
echo exec('find /var/spool/asterisk/monitor/ -type f -mtime +'.$days.' -exec rm -f {} ;');
$current = "DELETE :: $adate :: Records were deleted from CDR";
file_put_contents($file, $current, FILE_APPEND | LOCK_EX); //записываем запись в лог файл;
?>
Автоматическое удаление старых записей Asterisk
Скрипт удаления записей
$days = 180; //записи, которые старше 180 дней будут удалены. Укажите здесь количество дней для удаления;
$hostname = "localhost"; //если скрипт выполняется на том же сервере, что и IP - АТС Asterisk, то оставьте здесь localhost. В противном случае укажите IP - адрес;
$username = "delete"; //логин для подключения к базе данных asteriskcdrdb
$password = "333jIje45"; //пароль для подключения к базе данных asteriskcdrdb
$dbName = "asteriskcdrdb";
$file = '/home/admin/log_mail.txt';
$cdate =  date('Y-m-d 00:00:00', strtotime('-'.$days.' days')); //определяем максимальную дату звонка. Все звонки старше этой даты, будут удалены;
$adate = date('Y-m-d 00:00:00'); //текущая дата для записи в лог – файл;
/* создать соединение */ 
mysql_connect($hostname,$username,$password) OR DIE("Не могу создать соединение "); 
mysql_select_db($dbName) or die(mysql_error());
/* удаляем информацию о записях в таблице cdr*/ 
$query = "DELETE from cdr WHERE calldate < '$cdate';";
$res=mysql_query($query) or die(mysql_error());
/* Как много нашлось строк */ 
$number = mysql_num_rows($res); 
/* удаляем сами аудио - записи разговоров */
echo exec('find /var/spool/asterisk/monitor/ -type f -mtime +'.$days.' -exec rm -f {} ;');
$current = "DELETE :: $adate :: Records were deleted from CDR";
file_put_contents($file, $current, FILE_APPEND | LOCK_EX); //записываем запись в лог файл;
?>
Загруженный скрипт сохраните в формате .php.

Адаптация скрипта на Вашей АТС

Первое, что необходимо сделать, это создать пользователя для доступа к базе данных, который будет иметь права на удаление. Для этого, даем следующие команды:
[root@asterisk]# mysql
mysql>CREATE USER 'delete'@'localhost' IDENTIFIED BY '333jIje45';
Теперь предоставляем необходимые права:
mysql> GRANT DELETE ON asteriskcdrdb.cdr TO 'delete'
Готово. Теперь скрипт необходимо запланировать через cron для регулярного выполнения. Даем команду
crontab -e
и добавляем следующую строку:
*/2 10-18 * * 1-5 /usr/bin/php /home/deletecdr.php
В данном примере, наш скрипт будет отрабатывать каждые 2 минуты с понедельника по пятницу, с 10:00 до 18:00. Здесь, /home/deletecdr.php – полный путь к скрипту. Сохраняем изменения и наслаждаемся спокойствием за дисковое пространство 🙂