Com moure els enregistraments de trucades d'Asterisk guardades en RAM
Aquest article recull un script millorat per poder moure arxius (en aquest cas trucades telefòniques realitzades a través d'Asterisk) sense moure els arxius oberts (les trucades en curs). És molt típic haver de realitzar enregistraments de trucades d'Asterisk en un Call Center per exemple.
Per fer aquest script he utilitzat com a base un que vaig trobar aquí, gràcies al seu autor.
Recordar-vos abans de començar el que signifiquen els colors en Aplicacions i Sistemes:
Textos escrit en la línia d'ordres: blau
Sortida per la línia d'ordres: verd
Noms d'arxius i contingut d'arxiu: marrons
justificació
Asterisk és un programari de telefonia (molt utilitzat en VoIP) que permet construir una centraleta telefònica amb múltiples funcionalitats, entre elles la gravació de trucades. normalment, per qüestions de rendiment, els enregistraments de trucades les realitzem sobre una unitat RAM, o disc RAM (si voleu saber com crear-ne un podeu seguir aquest enllaç), per després, al cap de certs intervals de temps, emmagatzemar-les definitivament en una unitat de disc, per exemple, en un servidor NAS. D'aquesta manera, també evitem el deteriorament que suposa en la unitat de disc el continu esforç d'escriptura per la gravació de múltiples trucades.
És clar que això suposa un risc; una falla elèctrica i es perden els enregistraments. Per això convé guardar i adés aquestes gravacions en un lloc definitiu.
Aquest script l'he adaptat a les meves necessitats. Totes les gravacions es guarden en un subdirectori que es crea cada dia, amb la data del mateix, en format gsm. L'script va buscant inicialment aquest subdirectori, mira dins d'ell els arxius que no estan sent utilitzats, i finalment els mou a la seva ubicació definitiva.
Si no tinguéssim la precaució de mirar primer si estan sent utilitzats o no, se podrían mover archivos incompletos, con la pérdida de información que ello supone.
Desarrollo
El script que propongo y que a mí me funciona 😉 es el siguiente:
#!/bin/bash
# Para mover las llamadas grabadas en una unidad RAM
# Revisa el contenido de esa unidad y lo pasa a un disco duro
# tenemos un directorio en esa unidad,
# con subdirectorios que se generan diariamente
## Variables con los directorios a utilizar
RAMDIR="/tmp/discoram"
ALMACEN="/mnt/servidor_almacen" #unidad remota, previamente montada, almacén definitivo
cd $RAMDIR
ls -1d */ > listado.borrable
while read dia #cada línea un directorio diario, se extrae del archivo "listado_borrable"
do # aquí empieza la parte de mover archivos en sí, solo los de sonido formato gsm
for i in $(ls -1 $RAMDIR/$dia/*.gsm) ; do
lsof $ i #comprueba els arxius oberts per no moure'ls encara
valor = $? #estat de sortida, si és 0 l'arxiu està obert
if [ $valor amb nosaltres 0 ] ; llavors
si [ -d $ MAGATZEM / $ dia ] ; then
trobo carpeta d'enregistraments comprovada
else
mkdir $ MAGATZEM / $ dia
#solo crea la carpeta si cal
fi
mv $ i $ MAGATZEM / $ dia
fi
done
rmdir $ dia 2> /dev / null # Si queda buida la esborrem
done < listado.borrable #aqui acaba el while
El podeu descarregar de aquí si us és més còmode.
No oblideu opinar i aportar les vostres solucions personalitzades, sempre es pot millorar.