СКРИПТ АВТОМАТИЧЕСКОГО УДАЛЕНИЯ ЗАПИСЕЙ О ЗВОНКАХ
Основная переменная в скрипте - days. Укажите в ней количество дней, которое вы планируете хранить записи.
del-logcdr.php
<?php
$days = 180;
$hostname = "localhost";
$username = "deletecdr";
$password = "XXX2hsfg%isXXX";
$dbName = "asteriskcdrdb";
$con = mysqli_connect($hostname,$username,$password);
if (!$con) {
printf("Не могу подключиться к localhost. Ошибка: %s\n", mysqli_connect_error());
exit();
}
$file = '/var/www/html/script/del-logcdr.txt';
$cdate = date('Y-m-d H:i:s', strtotime('-'.$days.' days'));
$adate = date('Y-m-d H:i:s');
mysqli_select_db($con,$dbName) or die(mysqli_connect_error());
$query = "DELETE from cdr WHERE calldate < '$cdate';";
$res=mysqli_query($con,$query) or die(mysqli_connect_error());
$number = mysqli_affected_rows($con);
echo exec('find /var/spool/asterisk/monitor/ -type f -mtime +'.$days.' -exec rm -rf {} \;');
$current = "DELETE :: $adate :: $number records were deleted from CDR\n";
file_put_contents($file, $current, FILE_APPEND | LOCK_EX);
?>
Добавляем пользователя deletecdr в MYSQL и назначаем права DELETE, SELECT
[root@asterisk]# mysql
mysql> CREATE USER 'deletecdr'@'localhost' IDENTIFIED BY 'XXX2hsfg%isXXX';
mysql> GRANT DELETE, SELECT ON asteriskcdrdb.cdr TO 'deletecdr';
Если при запуске скрипта выдает вот такое в лог, помогите разобраться что не так
PHP Warning: strtotime():
cp /etc/php.ini /etc/php.ini_orig && sed -ie 's/\;date\.timezone\ \=/date\.timezone\ \=\ "Europe\/Moscow"/g' /etc/php.ini
Теперь скрипт необходимо запланировать через cron для регулярного выполнения. Даем команду crontab -e
Файлы cron расположены в /var/spool/cron/
* 2 * * * /usr/bin/php /var/www/html/script/del-logcdк.php
Выполняться будет каждый день в 2 часа ночи
Готово.