Foros del Web » Administración de Sistemas » Unix / Linux »

[SOLUCIONADO] Instruccion LOAD DATA LOCAL infile (Mysql) en archivo bash + crontab

Estas en el tema de Instruccion LOAD DATA LOCAL infile (Mysql) en archivo bash + crontab en el foro de Unix / Linux en Foros del Web. Hola Comunidad. Mi problema es la siguiente: Veran tengo un archivo .sh con todos los permisos de ejecución llamado prueba.sh chmod 777 /root/prueba.sh @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); ...
  #1 (permalink)  
Antiguo 06/02/2018, 15:58
 
Fecha de Ingreso: marzo-2015
Mensajes: 183
Antigüedad: 9 años
Puntos: 8
Instruccion LOAD DATA LOCAL infile (Mysql) en archivo bash + crontab

Hola Comunidad.

Mi problema es la siguiente:

Veran tengo un archivo .sh con todos los permisos de ejecución llamado
prueba.sh
chmod 777 /root/prueba.sh

Código C++:
Ver original
  1. #!/bin/bash
  2. mysql -u user -pclave base_datos <<QUERY_INPUT
  3. LOAD DATA LOCAL infile '/var/www/html/demo/file.csv'
  4. INTO TABLE factura FIELDS TERMINATED BY "|" lines terminated by "\n"
  5. (nro_informe,cod_tipo_operacion,fecha_emision,cod_local_emisor,cod_tipo_doc_usuario,num_doc_usuario,razon_social_usuario,cod_tipo_moneda,
  6. suma_dscto_global,suma_otros_cargos,monto_dsctos,monto_ope_gravadas,monto_ope_inafectas,monto_ope_exoneradas,monto_igv,
  7. monto_isc,monto_otr_tributos,monto_imp_venta);
  8. QUERY_INPUT

El script de forma manual si me ejecuta y me genera los insert en la table
sh /root/prueba.sh

Pero si coloco ese script den crontab, no me hace las inserciones.
0,1 * * * * /root/prueba.sh


Lo curioso es que si pongo mi correo en la variable MAILTO="" del crontab, mi script si se ejecuta correctamente.

¿Alguna idea por ahí?

Se agradece cualquier aporte.

Saludos.
  #2 (permalink)  
Antiguo 07/02/2018, 15:15
Avatar de BrujoNic
Super Moderador
 
Fecha de Ingreso: noviembre-2001
Ubicación: Costa Rica/Nicaragua
Mensajes: 16.935
Antigüedad: 22 años, 5 meses
Puntos: 655
Respuesta: Instruccion LOAD DATA LOCAL infile (Mysql) en archivo bash + crontab

¿Quién es el dueño del shell? ¿Lo estás ejecuntado con ese usario? Todo apunta a permisos de usuario.
__________________
La tecnología está para ayudarnos. No comprendo el porqué con esa ayuda, la gente escribe TAN MAL.
NO PERDAMOS NUESTRO LINDO IDIOMA ESPAÑOL
  #3 (permalink)  
Antiguo 08/02/2018, 15:40
 
Fecha de Ingreso: marzo-2015
Mensajes: 183
Antigüedad: 9 años
Puntos: 8
Respuesta: Instruccion LOAD DATA LOCAL infile (Mysql) en archivo bash + crontab

Cita:
Iniciado por BrujoNic Ver Mensaje
¿Quién es el dueño del shell? ¿Lo estás ejecuntado con ese usario? Todo apunta a permisos de usuario.
Hola.
El script ha sido creado con el usuario root (yo mismo lo cree).
Si tiene los permisos de root
chown root.root /root

Gracias por los comentarios.
  #4 (permalink)  
Antiguo 08/02/2018, 15:47
 
Fecha de Ingreso: marzo-2015
Mensajes: 183
Antigüedad: 9 años
Puntos: 8
Respuesta: Instruccion LOAD DATA LOCAL infile (Mysql) en archivo bash + crontab

Encontre la solucion al problema, sin hacer cambios en mi script.

El problema estaba en la sintaxis que coloque en el crontab.

#Opcion 1: esto no funciona
0,1 * * * * /usr/local/scripts/copiarArchivosXMLSunat.sh

#Opcion 2: esto si funciona
*,1 * * * * /usr/local/scripts/copiarArchivosXMLSunat.sh

La opción 2 funciona perfectamente, mientras que la opción 1 sólo funciona
cuando incluyo mi correo en la variable MAILTO="". Algo raro para mi gusto

OJO: A parte de esas 2 maneras para ejecutar un script cada ciertos minutos hay otra que es:
0/1 * * * * /usr/local/scripts/copiarArchivosXMLSunat.sh

Esta ultima no recomiendo usarlo ya que algunos servidores y el mismo crontab lo detecta como error en la sintaxis.

Bueno, hoy se aprendió algo nuevo con respecto al crontab.

Saludos a todos.

Etiquetas: bash, crontab, data, infile, instruccion, load, local, mysql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:51.