Mostrando entradas con la etiqueta consola. Mostrar todas las entradas
Mostrando entradas con la etiqueta consola. Mostrar todas las entradas

martes, 21 de octubre de 2014

Shell que ejecuta llava y envía archivo por ftp



 #!/bin/bash  
 #  
 # By Jose Luis Ramirez 2014/10/10  
 # Shell Script para transferencia de archivos via FTP  
 #  
 
 # ruta del log que registrara cada paso de esta shell
 vLog=/home/monitoreo_alarmas/DetallesTotalesNavegacion/Log/LogEnvioFtp.log  
   
 #ejecutamos el archivo jar  
 echo "ejecutando archivo DetalleTotalesNavegacion.jar">> $vLog  
 java -jar DetalleTotalesNavegacion.jar >> $vLog  
 
 # datos del servidor FTP remoto  
 HOST='x.x.x.x'  
 USER='user'  
 PASS='*****'  
 
 #sacamos la fecha de hoy  
 TODAY=$(date)  
   
 echo "---------------------------------------" >> $vLog  
 echo "| Lectura de archivos                 |" >> $vLog  
 echo "| Date: $TODAY                        |" >> $vLog  
 echo "| Shell para enviar archivos via FTP. |" >> $vLog  
 echo "| Comando < PUT > de FTP.       |" >> $vLog  
 echo "---------------------------------------" >> $vLog  
 echo " " >> $vLog  
   
 #El archivo a enviar tiene el siguiente nombre (archivo dinamico, generado por el proceso java que se ejecuto anteriormente):
 #TotalesxAplicacion_ + la fecha de ayer
 #ejemplo: TotalesxAplicacion_20141022

 fechaActual=$(date --date="yesterday" +"%Y-%m-%d")  
 
 #nombre del archivo  
 archivo=TotalesxAplicacion_$fechaActual  
   
 echo "archivo enviado via FTP [$archivo] " >> $vLog  
   
 echo " " >> $vLog  
 echo "--------------------------------------------------" >> $vLog  
 echo "| Transferencia de Archivos via FTP       |" >> $vLog  
 echo "| Iniciando Transferencia de archivos      |" >> $vLog  
 echo "| Maquina Local ---> Maquina Remota) Via vFTP ...|" >> $vLog  
 echo "--------------------------------------------------" >> $vLog  
 sleep 3;  
   
 #sftp $USER@HOST << end  
 ftp -ivn <<end  
 open $HOST  
 user $USER $PASS  
 cd /opt/JONAS_4_10_9/logs/DetalleIvrTotales/  
 lcd /home/monitoreo_alarmas/DetallesTotalesNavegacion/Log/  
 bin  
 mput ${archivo}  
 rename ${archivo} ${archivo}.txt  
 quit  
 end  
   
 #Mueve archivos a carpeta de respaldo  
 #mv EPA* respaldo  
  
 echo " " >> $vLog  
 echo "-----------------------------" >> $vLog  
 echo "|Fin de la Transferencia ...|" >> $vLog  
 echo "-----------------------------" >> $vLog  
 echo " " >> $vLog  
 sleep 3;  
   
   
 exit 0  
   

martes, 30 de septiembre de 2014

Scrip shell consulta base de datos y guarda resultados a un archivo

En el siquiente ejemplo veremos como hacer consultas mediante un archivo bash y guardar los resultados en un archivo de texto plano, para esto ocuparemos Mysql y 4 tablas: Emrpesa, Llamadas, Opciones y Transacciones. Este archivo bash sacará en 3 archivos de texo la info de cada Llamada.

La estructura de cada tabla seria así:

Tabla Empresa

Descripción: Aquí se guardaran las distintas empresas telefónicas como Claro, Entel, Movistar, etc. y por cada una se hara un informe el cual tendra 3 archivos: Llamadas, Opciones y Transacciones.

id_empresa (autoincremental),
nombre_empresa

Tabla Llamadas:

Descripción: Registra cada llamda hecha al menú de autoatención de cada empresa.

id_llamada (autoincremental),
id_empresa,
duracion_total,
numero_origen,
numero_destino,
fecha_inicio,
fecha_fin


Tabla Opciones:

Descripción: Registra las opciones presinadas por el cliente al momento de llamar a la central (Menú de autoatención como por ejemplo  Entel 103)

id_opcion (autoincremental)
id_llamada,
opcion_presionada

Tabla Transacciones:

Descripción : Cuando se presiona una opción del menú de autoatención, se gatillan transacciones, las cuales se registran en esta tabla.

id_trx (autoincremental),
id_llamada,
nombre_trx,
resultado,
duracion

nota: los campos que estan en negrita son referencias de otras tablas, por lo que la relacion entre estas tablas es de 1 a muchas.

Generamos el archivo bash que se guarda con extención .sh, ejemplo: informe.sh y se puede ejecutar así:

1) ./informe.sh
2) sh informe.sh
3) bash informe.sh

#!/bin/bash
user="usuario"
pass="xxxxxx"
db="BaseDeDatoAConectarMysql"


#opcines de columnas en Mysql
opc="--skip-column-names"


#Se necesita que el archivo tenga en su nombre la fecha de ayer
fecha=$(date --date="yesterday" +"%Y%m%d")


#Se quiere 3 informes que sean del dia anterior, ejemplo si hoy es 02/08/2014, entonces

#se requiere un informe de todo el día de ayer de '01/08/2014' hasta '01/08/2014 23:59:59'
#ponermos el intervalo de dias en -1 para restar un dia
intervalo="-1"

#se crea consulta y conexion a mysql. Esta obtiene todas las empresas que seran consultadas #empresa de telefonia (Tabla Empresa).


dbquery=$(mysql -u $user -p$pass $opc -e "use $db;SELECT id_empresa FROM Empresa ")

#se guardan los resultados en un array
arrayApp=($(for i in $dbquery;do echo $i;done))

#corroboramos que esten todos los datos en el array. Descomentar la siguiente linea
#echo ${arrayApp[@]};


#se recorre el array para ejecutar las querys
for i in ${arrayApp[@]}
do
nameFile1="_llamadas_$fecha.txt";
query="SELECT   LLA.id_llamada ID_LLAMADA,
LLA.id_empresa ,
LLA.duracion_total ,
LLA.numero_origen,
LLA.numero_destino,
LLa.fecha_inicio,
LLA.fecha_fin,
INTO OUTFILE '/rutaDondeSeGuardara/
$i$nameFile1' FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n'
FROM LLAMADAS LLA
WHERE LLA.fecha_inicio>= (CURDATE()
$intervalo - INTERVAL 0 DAY + INTERVAL 0 SECOND)
AND LLA.fecha_fin<= (CURDATE()
$intervalo - INTERVAL 0 DAY + INTERVAL 86399 SECOND)
AND LLA.id_empresa='
$i'
ORDER BY LLa.fecha_inicio ASC;"
;
mysql -u $user -p$pass -e "use $db;$query"

nameFile2="_opciones_$fecha.txt";
query="SELECT OPC.id_llamada ID_LLAMADA,
OPC.OPCION OPCION
INTO OUTFILE '/
rutaDondeSeGuardara/$i$nameFile2' FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n'
FROM OPCIONES OPC,
LLAMADAS LLA
WHERE 
LLA.fecha_inicio >= (CURDATE()$intervalo - INTERVAL 0 DAY + INTERVAL 0 SECOND)
AND 
LLA.fecha_fin <= (CURDATE()$intervalo - INTERVAL 0 DAY + INTERVAL 86399 SECOND)

AND LLA.id_empresa='$i'
AND 
LLA.id_llamada=OPC.id_llamada

ORDER BY LLA.fecha_inicio ASC;";
mysql -u $user -p$pass -e "use $db;$query";

nameFile3="_transac_$fecha.txt";
query="SELECT TRX.id_llamada ID_LLAMADA,
TRX.nombre_trx,
TRX.resultado,
TRX.duracion
INTO OUTFILE '/
rutaDondeSeGuardara/$i$nameFile3' FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n'
FROM Llamadas LLA,
Transacciones TRX
WHERE 
LLA.fecha_inicio >= (CURDATE()$intervalo - INTERVAL 0 DAY + INTERVAL 0 SECOND)
AND 
LLA.fecha_fin <= (CURDATE()$intervalo - INTERVAL 0 DAY + INTERVAL 86399 SECOND)

AND LLA.id_empresa='$i'
AND LLA.id_llamada=TRX.id_llamada
ORDER BY LLA.fecha_inicio ASC"
;
mysql -u $user -p$pass -e "use $db;$query";
done



Nota: este codigo fue testeado en un Shell, pero se cambiaron las tablas de las consultas, las cuales no estan testeadas, por lo que puede existir un error de consultas.

viernes, 2 de mayo de 2014

Script bach que ejecuta una sentencia Mysql


A continuación un script que ejecuta sentencia Mysql

#!/bin/bash
#crea archivo log, donde dice ruta ponemos la ruta donde queremos que este
touch /ruta/operacion.log
#permisos del archivo
chmod 755 /ruta/operacion.log
#usuario del archivo
chown miusuario:miusuario operacion.log
echo -e "*********COMIENZA ************" >> /ruta/operacion.log
#le ponemos la fecha de ejecucion
date >> /ruta/operacion.log
#conexion y consulta a la DB, en caso de que devuelva algo lo tiramos al log
 mysql -u root -ppassword basedato -e "SELECT NOW();" >> /ruta/operacion.log
echo -e "*********FIN ****************" >> /home/encuestasIVR/operacion.log