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

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!

После установки FreePBX возникла потребность чистить старые записи. В Asterisk 13 записи теперь складываются по папкам вида: /var/spool/asterisk/monitor/%Year%/%month%/%day%.


На просторах Интернет был найден скрипт, но он был не идеальным, отсылал по три письма, да и не удалял сами папки. Также не было никаких отчётов о том, что было удалено, а я не люблю оставаться в неведении: согласитесь, было бы не лишним знать что происходит на сервере. Вот, собственно говоря, сам скрипт. Комментарии есть возле каждого пункта на 2-х языках, у себя поставил его в cron с запуском раз в неделю:


#!/bin/bash
# Задаём переменные (Specify variables)
MYSQL_USER="pbxu$eR"                              # Имя пользователя MySQL (MySQL username)
MYSQL="/usr/bin/mysql"                            # Расположение MySQL (whereis mysql)
MYSQLCHECK="/usr/bin/mysqlcheck"                  # Расположение MySQLcheck (whereis mysqlcheck)
MYSQL_PASSWORD="xxxxxxxxxyyyyyyyyyyzzzzzzzzzzzzz" # Пароль пользователя MySQL (MySQL password)
EMAIL="admin@yourdomain.com"                      # Почтовый адрес для уведомлений (Email address for notification)
TYPE="month"                                      # Интервал времени (SECOND,MINUTE,HOUR,DAY,MONTH,YEAR)
NUMBER="3"                                        # Количество (3 месяца) (the number 3 months)
LOG="/var/log/cdr-temp.log"                       # Лог файл перезаписываемый и отсылаемый на почту(A temporary log file is sent on email as a report)
LOG1="/var/log/cdr-clean.log"                     # Лог файл постоянный (The log file permanent)
data="`date`"

# Чистим лог от старых записей (Clean old log records from)
echo > $LOG

# Делаем запись даты в лог (The date recorded in the log)
echo >> $LOG1
echo "---------=$data=---------" >> $LOG1
echo >> $LOG1

# Чистим asteriskcdrdb.cdr (clean asterisksdrdb.cdr)
if $MYSQL -u$MYSQL_USER -p$MYSQL_PASSWORD -e "delete from asteriskcdrdb.cdr where calldate < DATE_SUB(NOW(), interval $NUMBER $TYPE);"; then
echo >> $LOG1
echo Старые записи из asteriskcdrdb.cdr успешно удалены >> $LOG1
echo >> $LOG1
else
echo Не удалось удалить старые записи из asteriskcdrdb.cdr >> $LOG1
echo >> $LOG1
exit 0
fi

# Чистим asteriskcdrdb.cel (clean 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 успешно удалены >> $LOG1
echo >> $LOG1
else
echo Не удалось удалить старые записи из asteriskcdrdb.cel >> $LOG1
echo >> $LOG1
exit 0
fi

# Оптимизируем asteriskcdrdb (optimaze asteriskcdrdb table)
if $MYSQLCHECK -u$MYSQL_USER -p$MYSQL_PASSWORD --optimize asteriskcdrdb; then
echo asteriskcdrdb успешно оптимизирована >> $LOG1
echo >> $LOG1
else
echo Не удалось оптимизировать базу asteriskcdrdb >> $LOG1
echo >> $LOG1
exit 0
fi

echo >> $LOG1
echo "----------Были удалены следующие файлы и папки----------" >> $LOG1

# Чистим папки от файлов записи (Recording you want to delete, and empty folders)
find /var/spool/asterisk/monitor/ -name "*.*" -type f -mtime +91 -print -delete >> $LOG1
find /var/spool/asterisk/monitor/ -type d -empty -print -delete >> $LOG1

# Выводим последние 10 000 записей из временного лога и копируем их в постоянный (Get the last 100,000 records from the temporary log file and copy it to permanent)
grep -A 10000 "$data" $LOG1 >> $LOG

# Отсылаем письмо с логами чистки в теле письма (Send email with progress report)
echo "Отчёт об отчистке старых записей" | mail -s PBX-CDR-CLEANER $EMAIL < $LOG

Конструктивная критика приветствуется.


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

Источник: https://habr.com/ru/articles/781480/


Интересные статьи

Интересные статьи

Настройка аутентификации пользователей Carbonio в Active Directory, о которой мы писали в одной из прошлых статей, подразумевает, что в Carbonio LDAP уже имеются учетные записи, каждая из которых соот...
Когда вы поддерживаете большой Java-проект в течение более длительного периода, моменты, когда вы, наконец, можете удалить неиспользуемый код, могут быть очень приятными. Больше не н...
В прошлый раз мы поделились настоящим «хабрасериалом» об истории аудиотехники и музыкальной индустрии. Сегодня — продолжим снабжать «читальный зал» избранными статьями о том, как заду...
Приветствую. Представляю вашему вниманию перевод статьи «Keep the Footer at the Bottom: Flexbox vs. Grid», опубликованной 8 апреля 2020 года автором Stephanie Eckles Это первая ст...
У FreePBX есть Web Sip клиент. Мне было интересно как он работает. Начав изучать технологию WebRTC я наткнулся на 3 библиотеки — это JsSIP, его fork SIP.js, а также sipml5. JsSIP и...