img

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

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


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

Сам скрипт написан на PHP и представляет собой 23 строчки кода. Основная переменная в скрипте - days. Укажите в ней количество дней, которое вы планируете хранить записи:

<?php
$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 H:i:s', strtotime('-'.$days.' days')); //определяем максимальную дату звонка. Все звонки старше этой даты, будут удалены;
$adate = date('Y-m-d H:i:s'); //текущая дата для записи в лог – файл;
/* создать соединение */ 
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_affected_rows(); 
/* удаляем сами аудио - записи разговоров */
echo exec('find /var/spool/asterisk/monitor/ -type f -mtime +'.$days.' -exec rm -rf {} ;');
$current = "DELETE :: $adate :: $number records were deleted from CDR
";
file_put_contents($file, $current, FILE_APPEND | LOCK_EX); //записываем запись в лог файл;
?>
Автоматическое удаление старых записей Asterisk

Загруженный скрипт сохраните в формате .php.


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

Первое, что необходимо сделать, это создать пользователя для доступа к базе данных, который будет иметь права на удаление. Для этого, даем следующие команды:

[root@asterisk]# mysql
mysql>CREATE USER 'delete'@'localhost' IDENTIFIED BY '333jIje45';

Теперь предоставляем необходимые права:

mysql> GRANT DELETE, SELECT 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 - полный путь к скрипту. Сохраняем изменения и наслаждаемся спокойствием за дисковое пространство :)

Ссылка
скопирована
Получите бесплатные уроки на наших курсах
Все курсы
Еще по теме:
img
Мы создали калькулятор инсталляции IP - АТС Asterisk. При планировании сервера и необходимого оборудования заполните соответствующие поля для расчета производительности, шлюзов и плат
img
Скачать руководство администратора Cisco UCM/CME на русском языке
img
Скачать руководство администратора FreePBX на русском языке
img
Рассказываем как рассчитать пропускную способность для IP-вызовов Cisco
img
Рассказываем как настроить отправку СМС сообщений из контакт-центра Октелл через Ростелеком СМС Реклама