|
Ключ
Эта строка удалена.
Это слово было удалено. Это слово было добавлено.
Эта строка добавлена.
|
Изменения (25)
просмотр истории страницыСкрипт выгружает CDR с MERA на [FTP|CarbonBilling:Настройка FTP сервера для выгрузки CDR] биллинга. |
{info}* Даты звонка (начало, завершение) в CDR-файлах создаваемых MERA записываются в формате Unix Time, их необходимо конвертировать в формат подобный "2019-06-06 15:57:57", в приведенном ниже скрипте эту задачу выполняет дополнительный скрипт cdrformat.pl, вызываемый для преобразования каждой записи о вызове в отдельности.{info} |
* В скрипте добавлена защита от повторного запуска. У пользователя от имени которого выполняется скрипт должен быть доступ до LOCK-файла (/tmp/lock в примере), директория в которой он должен размещаться должна существовать.{info} |
{code}#!/bin/bash |
... |
set -eu |
LOCK='/tmp/lock' trap __exit EXIT __exit() { local ret=$? #rm -f $TMPDIR/*.$$ if [ "$ret" != 255 ] && [ "$ret" != 250 ]; then rm -f $LOCK fi return $ret } exit_if_locked(){ if [[ -f $LOCK ]]; then echo "Already rinning" exit 250 fi } |
# Путь к исходным CDR CDR_SRC_DIR='/mvts/billing/' |
... |
CDR_ARCHIVE='/mvts/billing/archive' # Путь до скрипта конвертации формата CDR |
CDR_CONVERTER='/root/CB5_Intagration/cdrformat.pl' CDR_CONVERTER='/mvts/CB5_Intagration/cdrformat.pl' |
# IP биллинга FTP_SERVER='10.0.0.1' |
... |
FIX_CSV='1' # "1"=выгружаем исходный файл, "0"=не выгружаем |
DEBUG='10' |
# 0 - не выгружаем на FTP |
... |
UPLOAD='1' |
process_upload(){ |
# Проверяем что есть папка для обработанных файлов |
[ ! -d "$CDR_DST_DIR" ] && mkdir $CDR_DST_DIR |
|
# Проверяем что есть файлы для выгрузки, предполагаем что файлы могут быть - только CDR |
if [[ `find $CDR_SRC_DIR -maxdepth 1 -type f -not -path '*/\.*' | wc -l` != "0" ]]; then |
# Получаем список файлов и обрабатываем |
find $CDR_SRC_DIR -maxdepth 1 -type f -not -path '*/\.*' | while read CDR_SRC_FILE; do |
CDR_DST_FILE=`echo $CDR_SRC_FILE | sed 's|'$CDR_SRC_DIR'|'$CDR_DST_DIR'|g'` |
# Если дебаг включен - файл копируем и печатаем предполагаемую команду перемещения файлов |
if [[ "$DEBUG" == "1" ]]; then |
cp $CDR_SRC_FILE $CDR_DST_FILE |
echo 'mv '$CDR_SRC_FILE $CDR_DST_FILE |
# Если дебаг выключен - тотолько перемещаем файл |
else mv $CDR_SRC_FILE $CDR_DST_FILE fi # Исправляем CDR (по необходимости) и складываем в отдельный файл на выгрузку if [[ "$FIX_CSV" == "1" ]]; then cat $CDR_DST_FILE | while read call; do /usr/bin/perl $CDR_CONVERTER <<< $(echo $call) done > $CDR_DST_FILE.csv fi |
else done |
mv $CDR_SRC_FILE $CDR_DST_FILE |
fi |
# Исправляем CDR (по необходимости) и складываем в отдельный файл на выгрузку if [[ "$FIX_CSV" == "1" ]]; then cat $CDR_DST_FILE | while read call; do /usr/bin/perl $CDR_CONVERTER <<< $(echo $call) done > $CDR_DST_FILE.csv fi done fi |
# Выгружаем на FTP биллинга если выгрузка включена |
... |
mv $base_file $CDR_ARCHIVE/ fi |
done{code} |
fi } main(){ exit_if_locked touch $LOCK process_upload exit 0 } main{code} |