Пожалуйста, войдите здесь. Часто задаваемые вопросы О нас
Задайте Ваш вопрос

Удаления записи разговоров

0

Здравствуйте

Написал скрипт:

#!/bin/bash
# Указываем директорию где расположены файлы
RECORDINGS=/var/spool/asterisk/monitor
# Указываем период за какой срок удалять файлы записи 
RECORDINGEXPIRY=14
# Указываем за какой срок хранить логи
LOGEXPIRY=365
# Дата
DATE=`date`
# Удаляем записи старше $RECORDINGEXPIRY дней
find $RECORDINGS -mtime +$RECORDINGEXPIRY -exec rm -rfv > removal-$DATE.log
# Удаляем логи старше $LOGEXPRY
find . -mtime +$LOGEXPIRY -exec rm -rf

Запускаю вот так:

0 8 * * * /srv/sh/atc/recordingdeletion.sh

мб кому мое решение полностью подойдет =) пользуйтесь

Но мне нужна помощь ГУРУ, как удалять в сдр отчетах ярлык на запись разговора если она старше 14 дней ?

Заранее благодарен!

Да совершенно верно, мне не нужно удалять записи сдр, мне нужно удалять ярлык на звуковой файл, дайте карму что-бы мог комментировать=)

удалить закрыть спам изменить тег редактировать

спросил 2013-06-07 14:59:19 +0400

DmitryK Gravatar DmitryK
1 7 1 4

обновил 2013-06-08 10:30:22 +0400

Comments

Дело не в карме - сайт глючит.

switch ( 2013-06-08 10:32:10 +0400 )редактировать

Спасибо, будем ждать когда сделается =)

DmitryK ( 2013-06-08 11:21:12 +0400 )редактировать

насколько я помню после удаления файлы в freepbx уже не показывает микрофончик. там просто проверка есть ли файл. или что за ярлычек вам надо удалить?

meral ( 2013-06-08 15:21:26 +0400 )редактировать

показывает =( и ссылается на не существующий файл

DmitryK ( 2013-06-09 01:41:05 +0400 )редактировать

обновите еластикс.

meral ( 2013-06-09 05:11:47 +0400 )редактировать

у меня стоит * + отдельно накатил фрипбх

DmitryK ( 2013-06-09 23:17:09 +0400 )редактировать

5 Ответов

0

Мой вариант на удаление старых файлов - удаляет по проверке занятого места внимательно проверяйте как отдается свободное место перед запуском - должно быть в процентах - меняйте на $4 на $5 по необходимости в 2 местах

df -l
df -l | grep ' /$' |  awk '{print $4}' | awk -F'%' '{print $1}'

Сам скрипт

#!/bin/sh
logfile=/var/log/mesto.log
dir=/var/spool/asterisk/monitor/
cd $dir
date=`date +%Y.%m.%d' '%H:%M:%S`
olddate=`stat -c%y  $(ls -t | tail -n 1) | awk -F' ' '{print $1}'`
mesto=`df -l | grep ' /$' |  awk '{print $4}' | awk -F'%' '{print $1}'`
zanyato=80
echo $date' Зaнято места на диске: '$mesto'%' >> $logfile #################
if [ "$mesto" -ge "$zanyato" ]; then
echo $date' Удаляются файлы за '$olddate >> $logfile ##################
fi
nmax=9
n=0
while [ "$mesto" -ge "$zanyato" ] && [ "$n" -lt "$nmax" ]; do
for FILE in `ls -lR --time-style=full-iso $dir | grep $olddate | awk {'print $9'}`
do
echo $date' Удаляется файл '$FILE >> $logfile  ##################
rm $FILE
done # Конец for
n=$(( $n + 1 ))
mesto=`df -l| grep ' /$' |  awk '{print $4}' | awk -F'%' '{print $1}'`
done # Конец while
if [ "$n" -lt "$nmax" ]; then
echo $date' Места достаточно. Скрипт выполнен '$n' раз' >> $logfile #################
else
echo $date' Скрипт выполнен максимальное число раз' >> $logfile ##############
fi
exit 0
ссылка удалить спам редактировать

ответил 2015-07-12 14:18:08 +0400

awsswa Gravatar awsswa flag of Russian Federation
456 5 2 7

Comments

рекомендую добавить в цикл sleep 1

meral ( 2015-07-12 22:46:48 +0400 )редактировать
0

Вот тут я написал скрипт для удаления записей из MySQL.

http://smirupobitu.ru/udalenie-iz-bazy-asterisk-staryx-zvonkov/

#!/bin/bash
# by adm@smirupobitu.ru

MYSQL_USER="root" # Имя пользователя MySQL
MYSQL=/usr/bin/mysql # Расположение MySQL (whereis mysql)
MYSQLCHECK=/usr/bin/mysqlcheck # Расположение MySQLcheck (whereis mysqlcheck)
MYSQL_PASSWORD="mysqlpassword" # Пароль пользователя MySQL
EMAIL="info@smirupobitu.ru" # Почтовый адрес для уведомлений
TYPE="month" # Интервал времени (SECOND,MINUTE,HOUR,DAY,MONTH,YEAR)
NUMBER="6" # Количество (6 месяцев)

# Чистим asteriskcdrdb.cdr

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

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

# Оптимизируем asteriskcdrdb

if $MYSQLCHECK -u$MYSQL_USER -p$MYSQL_PASSWORD --optimize asteriskcdrdb; then
        echo "asteriskcdrdb успешно оптимизирована" | mail -s "MySQL" $EMAIL
else
        echo "Не удалось оптимизировать базу asteriskcdrdb" | mail -s "MySQL" $EMAIL
        exit 0
fi
ссылка удалить спам редактировать

ответил 2015-04-25 14:01:04 +0400

sansey Gravatar sansey
1 1

обновил 2015-04-25 14:03:21 +0400

Comments

и что конкретно в нем хорошего? вы проверяли ваш "скрипт" с базой на 1млн записей? а на 10млн? вы вообще в курсе что делает команда optimize с innodb базой?

meral ( 2015-04-25 17:54:02 +0400 )редактировать

При обслуживании базы надо еще предусмотреть ротацию/удаление mysql.log, иначе он растет бесконечно, например: mv mysql.log mysql.old; mysqladmin flush-logs

yks ( 2015-07-14 10:21:33 +0400 )редактировать
0

как-то так:

mysql -e 'SELECT * INTO OUTFILE "/tmp/cdr.csv" FIELDS TERMINATED BY ";" OPTIONALLY ENCLOSED BY '\'\"\''  LINES TERMINATED BY "\n" FROM cdr ORDER BY calldate LIMIT 100000;' --user="asteriskuser" --password="4nccnuQcYbD4VZRc" asteriskcdrdb  |sed 's/^/[clean-cdr]    /' >> $logfile
        mysql -e "DELETE FROM cdr ORDER BY calldate LIMIT 100000" --user="asteriskuser" --password="4nccnuQcYbD4VZRc" asteriskcdrdb   |sed 's/^/[clean-cdr]    /' >> $logfile
        mysql -e "DELETE FROM recordings ORDER BY uniqueid LIMIT 20000" --user="asteriskuser" --password="4nccnuQcYbD4VZRc" asteriskcdrdb  |sed 's/^/[clean-cdr]    /' >> $logfile
ссылка удалить спам редактировать

ответил 2013-06-07 16:11:11 +0400

switch Gravatar switch
8334 11 7 91
http://lynks.ru/

Comments

хороший совет - ничего не скажешь пароль к бд и сразу в крон... лучше на сокеты не ставить проверку пароля а поставить аутентификацию по пиру (системному пользователю) а внешние скрипты типа phpmyadmin вязать по порту... не знаю если в mysql есть такая возможность - давно на постгресе. но это уже как-то глубоко в оффтопик :-)

octopas ( 2013-06-07 17:43:48 +0400 )редактировать

у mysql уже фиг знает сколько присутсвует возможность ставить разных пользователей разным адресам и хорошим тоном является запрет для пользователя рут доступа извне сервера. а если злоумышленик получил доступ к РУТОВОМУ кронтабу, то вас уже ничего не спасет, поверьте. хотя четсно говоря удаление 100000 записей на системах гед это 100000 больше чем сумарное число немного не радуют. я обычно удаляю по calldate>date_sub(now(),interval 6 month)

meral ( 2013-06-08 15:17:56 +0400 )редактировать

>>хороший совет - ничего не скажешь пароль к бд и сразу в крон...

А PHP скрипты веб интерфейса у вас пароли к БД спрашивают непосредственно перед исполнением?

switch ( 2013-06-08 15:50:34 +0400 )редактировать

скрипт надо не от рута запускать а из от униховского пользователя asterisk. Как это у меня - только юникс пользователи "asterisk" и "www-api" имеют доступ непосредственно к базе данных Астериска (так настроены pgident и pghba.conf). www-api - это пользователь для отдельного API контроллера (гальваническая развязка через JSON-RPC), который проксирует запросы от вебморды к базе и соответственно имеет к доступ к базе Астера. Если на сервере появились вредноносные веб скрипты то им нужно знать интерфейс между гальванической развязкой и вебмордой чтобы навредить базе Астера. Пароль в этом случае не нужен - api-контроллер коннектится к базе через сокет. Астер тоже через сокет может. если уже есть unix идентификация - зачем еще одна? без ident идентификации и с открытым паролем в /etc/crontab может быть весело... особенно если права для чтения для "other"... от рута по идее вообще в системе ничего запускаться не должно.

octopas ( 2013-06-08 18:40:02 +0400 )редактировать

на сервере телефонии имхо пофигу от какого пользователя. ибо кроме телефонии нчего нет. и если есть доступ к пользователю астриск - то уже можно всю инфу удалить.и смысл? ваши идеи какието сильно теоритические. много вы систем создали?

meral ( 2013-06-08 19:03:48 +0400 )редактировать

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

switch ( 2013-06-08 19:05:34 +0400 )редактировать

Elastix в глаза не видел - только Vanilla. Делаю с нуля на ZF2 обе части + marcelog/PAGI (для AGIшной части использую только некоторые компоненты фреймворка, но оказалось весьма кстатьи - но это уже к поднятой теме безопасности не имеет отношение вроде как :) ). Далеко не на нулевом этапе. До этого долго изучал вопрос. Почему Вы думаете что все системы обязательно должны быть клонами Эластикса? Если создавать тиражируемую систему то вопрос размещения на разных серверах - не обязательно в компетенции разработчика. Как получат доступ к пользователю "asterisk" без взлома рута расскажите мне - при /sbin/nologin? Код Астера вроде небезопасными функциями не страдает насколько мне известно... Лучшая защита - изоляция объектов. Когда доступ к базе может быть от любого пользователя юникс - это не есть гуд. вот что я хотел сказать да и только. чем больше уровней защиты, тем лучше теоретически. если никого не пускать на сервер - это хорошо, но может не продлиться вечно.

octopas ( 2013-06-08 23:49:17 +0400 )редактировать

тоесть месье теоретик. ну ок,че.

meral ( 2013-06-09 05:13:10 +0400 )редактировать

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

  1. база данных mysql мало кому интересна
  2. пароли к SIP учеткам хранятся в открытом виде (в случае freepbx)
  3. никто не будет две недели ломать ваш mysql сервер чтобы слить трафик, просто возьмут следующий адрес из списка

Ну и глупо разграничивать доступ по mysql учеткам внутри одной машины в то время когда у вас в скриптах хранится в открытом виде пароль доступа к базе. Это просто бессмысленно. Если на ваш сервер попал посторонний (ssh, telnet, etc...), то грош цена вашей паранойе.

В общем случае стоимость защиты не должна превышать стоимости последствий от ее компрометации. В подавляющем большинстве случаев защита сервера телефонии сводится к стойким паролям SIP учеток и изолированию (веб интерфейса и других сервисов) от внешнего мира. Запекать каждый раз мудреную систему - нафиг надо. Есть best practics, что нужно делать чтоб вероятность взлома была минимальной.

switch ( 2013-06-09 09:25:43 +0400 )редактировать
0

Зачем его удалять?

В запросе вебморды при выводе:

SELECT * FROM `cdr` WHERE `calldate`<(NOW() - INTERVAL 14 DAYS) AND `recordmarker`=false ORDER BY whatever LIMIT 20;

В диалплане разговоры которые не записываются помечайте этим полем.

Set(${CDR(recordmarker)}=unmonitored)

Соответственно в схему таблицы cdr нужно добавить поле:

 ALTER TABLE `cdr` ADD COLUMN recordmarker ENUM('unmonitored','monitored') DEFAULT 'monitored' COMMENT 'маркер записи';
ссылка удалить спам редактировать

ответил 2013-06-07 17:21:20 +0400

octopas Gravatar octopas
111 5 1 3

обновил 2013-06-07 17:37:03 +0400

-1

В линуксе есть такая прога tmpwatch ее можно по крону вызывать

и не надо скриптов (c) dobs

ссылка удалить спам редактировать

ответил 2013-06-09 19:46:52 +0400

dobs Gravatar dobs
72 15 10

Comments

и чем оно поможет удалить cdr в базе?

meral ( 2013-06-09 22:51:35 +0400 )редактировать

Ваш ответ

Please start posting your answer anonymously - your answer will be saved within the current session and published after you log in or create a new account. Please try to give a substantial answer, for discussions, please use comments and please do remember to vote (after you log in)!
[скрыть предварительный просмотр]

Закладки и информация

Добавить закладку
1 закладка

подписаться на rss ленту новостей

Статистика

Задан: 2013-06-07 14:59:19 +0400

Просмотрен: 3,829 раз

Обновлен: Jul 12 '15

Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией GNU GPL.