elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Sistemas Operativos
| |-+  GNU/Linux (Moderador: MinusFour)
| | |-+  Problema CRON y AT en Debian
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 3 Ir Abajo Respuesta Imprimir
Autor Tema: Problema CRON y AT en Debian  (Leído 10,011 veces)
rusogumo

Desconectado Desconectado

Mensajes: 20


Ver Perfil
Problema CRON y AT en Debian
« en: 21 Noviembre 2014, 12:48 pm »

Hola, buenos días,

Soy nuevo en el foro pero llevo visitando vuestra pagina desde hace tiempo ya que muchas veces encuentro soluciones a mis problemas.

Mi problema es el siguiente... Llevo varios días intentando hacer un script que parse un archivo .log. Después de conseguirlo decidí que se ejecutaría todos los días para hacer un backup de los datos. El problema viene cuando al probar el script por teclado como usuario root se ejecuta correctamente, pero cuando lo pruebo mediante CRON o AT para que lo haga automaticamente no me da el mismo resultado...
Tengo problemas con las variables tipo ${variable:numero} que por linea de comando funcionan correctamente pero con CRON y AT estan vacias

Alguien puede arrojar un poco de luz a mi oscuro mundo??? Si necesitais mas información no dudeis en preguntar. Muchas gracias a todos!!


« Última modificación: 21 Noviembre 2014, 19:43 pm por #!drvy » En línea

MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.529


I'm fourth.


Ver Perfil WWW
Re: Problema CRON y AT en Debian
« Respuesta #1 en: 21 Noviembre 2014, 14:40 pm »

Vas a tener que poner tu crontab y si puedes el script.


En línea

rusogumo

Desconectado Desconectado

Mensajes: 20


Ver Perfil
Re: Problema CRON y AT en Debian
« Respuesta #2 en: 21 Noviembre 2014, 14:53 pm »

Si te refieres al doc que sale cuando ejecutas #crontab -e esta es mi configuración
 55    23      *       *       *       /usr/local/nagios/libexec/accessEvents.sh

En cuanto al script es un chorrazo...

Código
  1. #!/bin/bash
  2.  
  3. adminFound=0
  4. PROGNAME="accessEvents.sh"
  5.  
  6. hostsql=127.0.0.1
  7. usersql=nagios
  8. dbsql=db_audit
  9. portdb=5432
  10.  
  11. sql="psql --host=$hostsql --port=$portdb --username=$usersql --dbname=$dbsql"
  12.  
  13. fileUsers=/var/log/audit/auditAdminUsers.log
  14.  
  15. case "$1" in
  16. --query)
  17. case "$2" in
  18. --table)
  19.                        if [ -z $3 ];then
  20.                                echo No table to check. Please try again!!
  21.                        else
  22. case "$4" in
  23. --event)
  24.                       if [ -z $5 ];then
  25.                                 echo No event to check. Please try again!!
  26.                         else
  27.                                 echo Id. Event = $5
  28.                                 eventQ=$(echo "SELECT user_event, n_times FROM $3 WHERE id_event=$5 ORDER BY user_event;"|$sql)
  29.                                 echo $eventQ
  30.                         fi
  31.                 ;;
  32.                 --user)
  33.                         if [ -z $5 ];then
  34.                                 echo No user to check. Please try again!!
  35.                         else
  36.                                 echo User Event = $5
  37.                                userQ=$(echo "SELECT id_event, n_times FROM $3 WHERE user_event='$5' ORDER BY id_event;"|$sql)
  38.                                echo $userQ
  39.                         fi
  40.                 ;;
  41.                 --times)
  42.                         if [ -z $5 ];then
  43.                                 echo Neither user nor event to check. Please try again!!
  44.                         else
  45.                                 if [ -z $6 ];then
  46.                                         echo Not event or user to check. Please try again!!
  47.                                 else
  48.                                         echo User Event = $5 Id. Event = $6
  49.                                         timeQ=$(echo "SELECT n_times FROM $3 WHERE user_event='$5' AND id_event=$6 ORDER BY id_event;"|$sql)
  50.                                         echo $timeQ
  51.                                 fi
  52.                         fi
  53.                 ;;
  54. *)
  55.                                 echo DB Table = $3
  56.                                 tableQ=$(echo "SELECT * FROM $3  ORDER BY id_event;"|$sql)
  57.                                 echo $tableQ
  58. ;;
  59. esac
  60.                        fi
  61.                ;;
  62.                --db)
  63.                        dbQ=$(echo "\dt"|$sql)
  64.        echo $dbQ
  65.                ;;
  66. *)
  67. echo You need more arguments to make a query. Please try again!!
  68. ;;
  69. esac
  70. ;;
  71. --help)
  72. echo "Usage:"
  73. echo -e "  $PROGNAME --parser \n\t Parse daily event log, create in the same folder accessResume.log and fill the daily audit table"
  74. echo -e "  $PROGNAME --total \n\t Add daily audit table data to audit events table. WE RECOMMEND USE \"--parser\" OPTION BEFORE \"--total\""
  75. echo -e "  $PROGNAME --query --db <DATABASENAME> \n\t Return DB TABLE NAMES"
  76. echo -e "  $PROGNAME --query --table <TABLENAME> \n\t Return ALL TABLE INFO"
  77. echo -e "  $PROGNAME --query --table <TABLENAME> --event <IDEVENT> \n\t Return USERS and TIMES"
  78. echo -e "  $PROGNAME --query --table <TABLENAME> --user <USERNAME> \n\t Return EVENTS and TIMES"
  79. echo -e "  $PROGNAME --query --table <TABLENAME> --times <USERNAME> <IDEVENT> \n\t Return TIMES"
  80. ;;
  81. --parser)
  82.  
  83. echo "TRUNCATE TABLE tb_daily_audit;"|$sql
  84.  
  85. today=$(date +"%Y-%m-%d")
  86.  
  87. fileIn=/var/log/audit/$today/accessEvents.log
  88. #fileIn=/var/log/audit/2014-11-19/accessEvents.log
  89. fileOut=/var/log/audit/$today/accessResume.log
  90. #fileOut=/var/log/audit/2014-11-19/accessResume.log
  91. echo "" > $fileOut
  92. /usr/local/nagios/libexec/accessBackup.sh
  93.  
  94. #echo Antes read >> $fileOut
  95. if [ -f $fileIn ];then
  96. #echo Antes read >> $fileOut
  97.    while read -r line1
  98.    do      
  99. #echo Dentro read1 >> $fileOut
  100. idEvent=`echo $line1|awk '{print $5}'`
  101. audit=`echo $line1|awk '{print $9}'`
  102. userPos=`echo $line1|grep -bo 'Nombre de cuenta:'|awk -F ":" '{print $1}'`
  103. objectPos=`echo $line1|grep -bo 'Nombre del* objeto:'|awk -F ":" '{print $1}'`
  104. user2=`echo ${line1:$userPos}|awk '{print $5}'`
  105. #echo USER - $user1>> $fileOut
  106. #user2=`echo $user1 | awk '{print $5}'`
  107. object2=`echo ${line1:$objectPos}|awk '{print $8}'`
  108. #echo OBJECT - $object1>> $fileOut
  109. #object2=`echo $object1| awk '{print $8}'`
  110. #echo userpos: $userPos user: $user2 objectpos: $objectPos object: $object2 >> $fileOut
  111. while read line2
  112. do
  113.    #echo Dentro read2 >> $fileOut
  114.    if [ $adminFound == 0 ];then
  115. #echo $line2=$user2>> $fileOut
  116. if [ $line2 == $user2 ];then
  117. adminFound=1
  118. #echo admin Found!!
  119. fi
  120.    fi
  121. done < $fileUsers
  122. #echo $admin == 0 >> $fileOut
  123. if [ $adminFound == 0 ];then
  124. #echo NO COINCIDE >> $fileOut
  125. # PARA LOS USUARIOS QUE NO ESTEN EN LA LISTA ADMIN        
  126. res=$(echo "INSERT INTO tb_daily_audit (user_event,id_event,n_times) VALUES ('$user2','$idEvent',1);"|$sql)
  127.     #echo res=$res
  128.     if [ -z "$res" ];then
  129.        echo "UPDATE tb_daily_audit SET n_times=n_times +1 WHERE user_event='$user2' AND id_event='$idEvent';"|$sql
  130.             fi
  131.     general=`echo $line1|awk  '{print $1, $2, $3, $5, $9, $10}'`
  132. if [ $object2 == "N/A" ];then
  133.        echo $general $user2 NO HAY OBJETO! >> $fileOut
  134. else
  135.    echo $general $user2 $object2 >> $fileOut
  136. fi
  137. fi
  138. adminFound=0
  139.    done < $fileIn
  140.    echo -e "\nParse finished!! accessResume.log and daily audit table ready!!"
  141. else
  142.    echo -e "\n" $fileIn " does not exist!! \n"
  143. fi
  144. ;;
  145. --total)
  146. echo "UPDATE tb_audit_events SET n_times=n_times+(select n_times from tb_daily_audit where id_event=tb_audit_events.id_event AND user_event=tb_audit_events.user_event)WHERE tb_audit_events.user_event=(select user_event from tb_daily_audit where id_event=tb_audit_events.id_event AND user_event=tb_audit_events.user_event) AND tb_audit_events.id_event=(select id_event from tb_daily_audit where id_event=tb_audit_events.id_event AND user_event=tb_audit_events.user_event);"|$sql
  147. echo -e "\nDaily audit table updated!!"
  148. ;;
  149. *)
  150. echo WARNING!!! You are not using this script properly. If you need help, please use $PROGNAME --help
  151. ;;
  152. esac


ESPERO QUE ESTA INFORMACIÖN OS AYUDE
« Última modificación: 21 Noviembre 2014, 16:59 pm por #!drvy » En línea

MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.529


I'm fourth.


Ver Perfil WWW
Re: Problema CRON y AT en Debian
« Respuesta #3 en: 21 Noviembre 2014, 15:17 pm »

Pues lo primero que me viene a la mente es que no le estas pasando ninguna opcion.

¿Tiene el script permisos de ejecución?

Código
  1. stat /usr/local/nagios/libexec/accessEvents.sh

¿El crontab de quien es? ¿De un usuario normal? ¿Necesita permisos elevados?
En línea

rusogumo

Desconectado Desconectado

Mensajes: 20


Ver Perfil
Re: Problema CRON y AT en Debian
« Respuesta #4 en: 21 Noviembre 2014, 15:32 pm »

-rwxrwxrwx 1 root   root   7,1K nov 21 12:27 accessEvents.sh

No tiene ninguna opcion el comando de ejecucion del script. Totalmente de acuerdo, pero ese no es el problema...
Ejecutar Cron ejecuta. El problema esq se quedan en blanco las variables ${variable:posicion} y van arrastrando el problema y no hace funcionar bien el script, es decir, el resultado no es el mismo

Edito con root, ejecuto con root y lo hago todo en root... No se si el Cron ejecuta con otro usuario... Lo desconozco

Gracias por la ayuda =)
En línea

MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.529


I'm fourth.


Ver Perfil WWW
Re: Problema CRON y AT en Debian
« Respuesta #5 en: 21 Noviembre 2014, 15:55 pm »

-rwxrwxrwx 1 root   root   7,1K nov 21 12:27 accessEvents.sh

No tiene ninguna opcion el comando de ejecucion del script. Totalmente de acuerdo, pero ese no es el problema...
Ejecutar Cron ejecuta. El problema esq se quedan en blanco las variables ${variable:posicion} y van arrastrando el problema y no hace funcionar bien el script, es decir, el resultado no es el mismo

Edito con root, ejecuto con root y lo hago todo en root... No se si el Cron ejecuta con otro usuario... Lo desconozco

Gracias por la ayuda =)


Pues, si ejecutas el script sin ninguna opcion devuelve esto:

Código
  1. WARNING!!! You are not using this script properly. If you need help, please use accessEvents.sh --help

Es decir, no se ejecuta nada, mas que el *) del primer case. El único que usa la nomenclatura que has puesto para expandir la variable desde un offset es la opcion --parser (que no estás usando).
En línea

rusogumo

Desconectado Desconectado

Mensajes: 20


Ver Perfil
Re: Problema CRON y AT en Debian
« Respuesta #6 en: 21 Noviembre 2014, 16:07 pm »

OK te comprendo pero veo q no kieres mirar un poco mas haya de lo que tienes enfrente de tus narices...

Te estoy diciendo donde tengo el problema y tu estas emperrado en q son las opciones del comando... Si te vas a quedar mas agusto pones: /usr/local/nagios/libexec/accessEvents.sh --parser y como no tienes ni una base de datos como la mia ni los archivos que tengo yo configurados no te va a hacer nada... pero eso si, el comando tendra sus opciones y podras seguir intentando echarme una mano.

Es muy frustrante para mi... perdoname si no soy muy educado pero es la segunda vez que te digo que el comando no es el problema y aunque lo pongas bien no vas a dar con la solución porque no tiene nada que ver las opciones con las que ejecuto el script desde cron.

Gracias por tu tiempo... Pero no lo pierdas con el comando que ejecuta el codigo, sino en el codigo... MIL GRACIAS
En línea

MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.529


I'm fourth.


Ver Perfil WWW
Re: Problema CRON y AT en Debian
« Respuesta #7 en: 21 Noviembre 2014, 16:59 pm »

OK te comprendo pero veo q no kieres mirar un poco mas haya de lo que tienes enfrente de tus narices...

Te estoy diciendo donde tengo el problema y tu estas emperrado en q son las opciones del comando... Si te vas a quedar mas agusto pones: /usr/local/nagios/libexec/accessEvents.sh --parser y como no tienes ni una base de datos como la mia ni los archivos que tengo yo configurados no te va a hacer nada... pero eso si, el comando tendra sus opciones y podras seguir intentando echarme una mano.

Es muy frustrante para mi... perdoname si no soy muy educado pero es la segunda vez que te digo que el comando no es el problema y aunque lo pongas bien no vas a dar con la solución porque no tiene nada que ver las opciones con las que ejecuto el script desde cron.

Gracias por tu tiempo... Pero no lo pierdas con el comando que ejecuta el codigo, sino en el codigo... MIL GRACIAS


Yo simplemente estoy tratando de entender que quieres hacer con el script. Literalmente, solo estas diciendo que no te funciona la manipulacion del string (una operacion de expansion, no una variable).

Entonces me pones:

Código
  1. 55    23      *       *       *       /usr/local/nagios/libexec/accessEvents.sh

Un cron que se ejecuta a las 11:55 pm todos los dias. Me estás diciendo que tu corres el script asi:

/usr/local/nagios/libexec/accessEvents.sh y hace algo diferente?

Yo solo quiero saber que es lo que esperas de tu script. Lo único que te puedo decir es que ejecutando el script tal cual lo tienes no deberia hacer NADA.
En línea

rusogumo

Desconectado Desconectado

Mensajes: 20


Ver Perfil
Re: Problema CRON y AT en Debian
« Respuesta #8 en: 21 Noviembre 2014, 18:11 pm »

OKI intentare explicarme mejor =)

El script parsea unos eventos... Lo q hago es coger unos campos concretos del evento que se ha generado (id, usuario, objeto...). Para buscar la cadena q debo almacenar en las variables uso esto:

userPos=`echo $line1|grep -bo 'Nombre de cuenta:'|awk -F ":" '{print $1}'`
user2=`echo ${line1:$userPos}|awk '{print $5}'`

lo q hago en "userPos" es guardar la posicion donde a encontrado la cadena y la cadena que buscaba (220:Nombre de cuenta) En "user2" se almacena la cadena del usuario q busco.

El kit de la cuestion es que cuando ejecuto esto por linea de comandos (root# /usr/local/nagios/libexec/accessEvents.sh --parser) el script funciona correctamente, es decir, las variables se llenan y creo el accessResume.log correctamente y rellena las tablas de la DB con los datos que deseo
Pero si lo ejecuto mediante CRON (55    23      *       *       *       /usr/local/nagios/libexec/accessEvents.sh --parser) o AT (root# at 23:55 <ENTER>     /usr/local/nagios/libexec/accessEvents.sh --parser <ENTER>        <ctrl+d>) se ejecuta el script pero las variables "userPos" y"user2" estan vacias, lo q proboca que el accessResumen este incompleto y al no tener valores no almacena en la tablas de la base de datos

Lo q no entiendo es porque si lo ejecuto por linea de comandos lo hace bien y si lo hago   automaticamente no... Q es lo que hace que esas variables esten vacias... o.O
En línea

MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.529


I'm fourth.


Ver Perfil WWW
Re: Problema CRON y AT en Debian
« Respuesta #9 en: 21 Noviembre 2014, 19:39 pm »

OKI intentare explicarme mejor =)

El script parsea unos eventos... Lo q hago es coger unos campos concretos del evento que se ha generado (id, usuario, objeto...). Para buscar la cadena q debo almacenar en las variables uso esto:

userPos=`echo $line1|grep -bo 'Nombre de cuenta:'|awk -F ":" '{print $1}'`
user2=`echo ${line1:$userPos}|awk '{print $5}'`

lo q hago en "userPos" es guardar la posicion donde a encontrado la cadena y la cadena que buscaba (220:Nombre de cuenta) En "user2" se almacena la cadena del usuario q busco.

El kit de la cuestion es que cuando ejecuto esto por linea de comandos (root# /usr/local/nagios/libexec/accessEvents.sh --parser) el script funciona correctamente, es decir, las variables se llenan y creo el accessResume.log correctamente y rellena las tablas de la DB con los datos que deseo
Pero si lo ejecuto mediante CRON (55    23      *       *       *       /usr/local/nagios/libexec/accessEvents.sh --parser) o AT (root# at 23:55 <ENTER>     /usr/local/nagios/libexec/accessEvents.sh --parser <ENTER>        <ctrl+d>) se ejecuta el script pero las variables "userPos" y"user2" estan vacias, lo q proboca que el accessResumen este incompleto y al no tener valores no almacena en la tablas de la base de datos

Lo q no entiendo es porque si lo ejecuto por linea de comandos lo hace bien y si lo hago   automaticamente no... Q es lo que hace que esas variables esten vacias... o.O

Lo único que se me ocurre es que sea cuestión del PATH o alguna variable de entorno.

Agrega un crontab:

Código
  1. * * * * * env > ~/root.txt

Sacalas del archivo de texto:

Código
  1. cat ~/root.txt

Pegalo aquí:

Tambien dinos donde esta awk, date y grep.

Código
  1. whereis grep awk date

¿Si el path está bien entonces lo único que se me ocurre es que $today cambie? Verifica que este bien y que haya un archivo ahi:

Código
  1. echo $today >> ~/root.txt
En línea

Páginas: [1] 2 3 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Sesiones en un cron
PHP
XafiloX 8 2,787 Último mensaje 13 Marzo 2009, 19:22 pm
por XafiloX
Crear un Cron
GNU/Linux
pacomt 1 2,450 Último mensaje 19 Julio 2010, 16:48 pm
por unixgeek
De Debian squeeze a Debian wheezy (problema)
GNU/Linux
Skywalker 0 2,188 Último mensaje 1 Mayo 2013, 16:59 pm
por Skywalker
Problema CentOS con SELinux y cron
GNU/Linux
Pedro_madrid 3 3,467 Último mensaje 22 Junio 2015, 15:30 pm
por MinusFour
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines