четверг, 15 июня 2017 г.

Удаление старых записей в asterisk, удаление старых файлов в linux

При большом количестве абонентов и высокой интенсивности звонков в Asterisk, с включенными записями разговоров для всех, возникает периодическая потребность в их очистке. Ниже приведен пример ручного и автоматического удаления файлов по времени их существования.

Краткая инстуркция

Примеры:

Команда в консоли для удаления файлов старше 180 дней:
 find /var/spool/asterisk/monitor -mtime +180 -exec rm -R {} \; 

Автоматическое удаление с помощью cron (планировщик задач в Linux):

Просмотр записей в cron:
crontab -l

Редактирование заданий от текущего пользователя (открывается в редакторе vi):
crontab -e

Нужно добавить эту запись и сохранить, смотрите как пользоваться редактором vi здесь.
12 2 * * * root find /var/spool/asterisk/monitor -mtime +180 -exec rm -R {} \;
Ежедневно в 2:12 ночи будет запускаться команда от пользователя root.

Формат cron:
* * * * *
| | | | |
| | | | +----- Дни недели (диапазон: 1-7)
| | | +------- Месяцы     (диапазон: 1-12)
| | +--------- Дни месяца (диапазон: 1-31)
| +----------- Часы       (диапазон: 0-23)
+------------- Минуты     (диапазон: 0-59)

Подробнее про формат cron здесь

Подробная инструкция

Удаление старых записей в Asterisk и устаревших файлов в Linux

При высокой нагрузке на сервер Asterisk, особенно если включена запись разговоров для всех абонентов, необходимо периодически удалять устаревшие файлы, чтобы освободить место на диске и поддерживать стабильную работу системы. В этой инструкции подробно рассмотрены способы удаления таких файлов как вручную, так и автоматически через планировщик задач cron.


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

Чтобы удалить файлы записей звонков, хранящиеся в каталоге /var/spool/asterisk/monitor, можно использовать команду find, которая позволяет находить файлы по их дате создания.

Пример:

find /var/spool/asterisk/monitor -mtime +180 -exec rm -R {} \;
  • /var/spool/asterisk/monitor — путь к папке, где хранятся записи разговоров.
  • -mtime +180 — указывает, что удаляться будут файлы, старше 180 дней.
  • -exec rm -R {} \; — команда, которая удаляет найденные файлы.

Чтобы выполнить удаление с подтверждением каждого файла, можно использовать:

find /var/spool/asterisk/monitor -mtime +180 -ok rm -R {} \;

Для проверки, какие файлы будут удалены, используйте find без удаления:

find /var/spool/asterisk/monitor -mtime +180 -ls

Автоматическое удаление файлов через cron

Чтобы настроить автоматическое удаление старых записей, можно воспользоваться планировщиком задач cron, который позволяет выполнять команды по расписанию.

Просмотр текущих заданий cron

Для отображения всех запланированных задач от текущего пользователя выполните команду:

crontab -l

Редактирование cron-заданий

Для редактирования списка задач используйте команду:

crontab -e

По умолчанию, файл откроется в редакторе vi или nano (в зависимости от настроек системы).

Добавление задания на автоматическое удаление файлов

Добавьте следующую строку в crontab, чтобы ежедневно в 2:12 ночи удалялись записи старше 180 дней:

12 2 * * * root find /var/spool/asterisk/monitor -mtime +180 -exec rm -R {} \;

Расшифровка cron-формата

* * * * *
| | | | |
| | | | +----- День недели (0 - вс, 1 - пн, ..., 6 - сб)
| | | +------- Месяц (1-12)
| | +--------- День месяца (1-31)
| +----------- Часы (0-23)
+------------- Минуты (0-59)

Пример записи:

  • 12 2 * * * — выполнение в 02:12 каждую ночь.
  • root — выполнение от имени суперпользователя.
  • find /var/spool/asterisk/monitor -mtime +180 -exec rm -R {} \; — команда поиска и удаления файлов.

Дополнительные примеры cron-записей

  • Удаление файлов раз в неделю по воскресеньям в 3:00 ночи:
    0 3 * * 0 root find /var/spool/asterisk/monitor -mtime +180 -exec rm -R {} \;
    
  • Удаление файлов каждый день в полночь:
    0 0 * * * root find /var/spool/asterisk/monitor -mtime +180 -exec rm -R {} \;
    

Дополнительные настройки безопасности

  1. Запись лога об удаленных файлах: Чтобы сохранять информацию об удаленных файлах в лог, можно изменить команду следующим образом:

    find /var/spool/asterisk/monitor -mtime +180 -exec rm -R {} \; -print >> /var/log/asterisk_cleanup.log
    
  2. Использование tmpwatch для автоматической очистки: В некоторых дистрибутивах Linux можно использовать tmpwatch для автоматического удаления файлов старше определенного времени:

    tmpwatch --mtime --nodirs 180 /var/spool/asterisk/monitor
    

    Это удобный инструмент, который автоматически очищает файлы по дате последнего изменения.


Автоматическая очистка старых записей Asterisk — важный процесс для поддержания стабильности системы. Использование команд find и cron позволяет автоматизировать удаление, снижая нагрузку на сервер и освобождая дисковое пространство. Для дополнительного контроля можно настроить логирование или использовать альтернативные утилиты, такие как tmpwatch. Регулярный мониторинг и настройка правильных параметров гарантируют бесперебойную работу Asterisk без риска переполнения диска.




1 комментарий:

  1. Возможно будет полезен, более универсальный вариант.
    https://github.com/vixfree/clear_asterisk-db
    не на что не претендую, просто сам убил кучу времени для автоматизации процесса и если честно нормальных решений не нашел.

    ОтветитьУдалить