Ejecutar comandos para eventos

Bueno gente, un amigo (Zak) me pidió una solución para ejecutar scripts para determinados eventos de logs. No conozco nada que haga esto así que le voy a recomendar que haga lo que pongo acá abajo.

Primero creamos una pipe fifo
solucionesroot:~# mkdir /var/spool/logwath/
solucionesroot:~# mkfifo /var/spool/logwath/auth
Ahora solo los que nos queda es crear un daemon, too easy..

#!/bin/bash
while (a=b); do
cat /var/spool/logwath/auth | procesar_log
done;

Y ahora desde otra consola probamos
solucionesroot:~# echo “asdf” > /var/spool/logwath/auth

Y listo, ¿ahora en que nos sirve esto?
Bueno, con esto podemos decirle a nuestro syslog que mande un archivo de log a nuestro daemon, con cada línea que noestro syslog deje le enviará la línea a script procesar_log
Zak espero que te sirva.
Saludos a todos.
[poll id=”3″]

Tags: , , , , , , ,

4 Responses to “Ejecutar comandos para eventos”

  1. Facu says:

    a ver si entendi…
    despues de crear la pipe y dejar el daemon corriendo… hago que mi syslog mande los eventos “auth” al file /var/spool/logwath/auth

    verdad? de esta menera, cada vez que syslog mande la linea de log, esta tambien le llegara como primer parametro a procesar_log??

    porque no me funciona, llegan cosas vacias a procesar_log.
    mi procesar_log tiene un simple:

    #!/bin/bash
    echo $1 >> /tmp/test

    y cuando me fijo en /tmp/test para ver que llego tengo dos lineas vacias

    lo probaste? que puede ser?

    desde ya mil gracias!

    • admin says:

      Claro Zak, es correcto lo que entiendes, el tema es que tienes que leer del stdin, no de los parámetros que te pasan ($1 $2 etc). Te dejo un ejemplo del script que podrías usar.

      #!/bin/bash
      while read line; do
      echo “asdfasdf$line”
      done;

      Espero te sirva.
      MN

  2. Facu says:

    lo pruebo cuando llego a casa! gracias de nuevo!

    cuando termine todo el sistemita lo publico, la idea es sacar una foto con la webcam cuando un login falla, y mandar la cara del intruso por mail. jeje

    salu3!