2010-09-11 9 views
5

Hay un directorio donde un amigo agrega nuevas compilaciones de un producto.un programa para supervisar un directorio en Linux

La lista se parece a esto

$ ls path-to-dir/ 
01 
02 
03 
04 
$ 

donde los números que se indican no son sino nombres de archivos de los directorios que contienen las compilaciones.

Tengo que ir y verificar manualmente cada vez si hay una nueva compilación o no. Estoy buscando una manera de automatizar esto, para que el programa pueda enviar un correo electrónico a algunas personas (incluyéndome a mí) siempre que se actualice path-to-dir/.

  • ¿Tenemos una utilidad ya existente o una biblioteca Perl que hace esto?

    inotify.h hace algo similar, pero no es compatible con mi kernel (2.6.9).

Creo que puede haber una manera fácil en Perl.

  • ¿Crees que esto funcionará?

    Sigue ejecutando un ciclo en Perl que hace un ls path-to-dir/ después de, digamos, cada 5 minutos y almacena los resultados en una matriz. Si descubre que los nuevos resultados son diferentes de los resultados anteriores, envía un correo electrónico usando Mail o Email.

+1

¿Por qué no puede actualizar el kernel? Eso es bastante viejo ahora, los últimos kernels estables ahora son 2.6.34.5 y 2.6.35.4 respectivamente .... – t0mm13b

+0

@ tommieb75: company machine => no es posible. – Lazer

+2

Saber cuándo se construirá será difícil. ¿Tal vez 'mails' construye "Lazer 'como el último paso en' make build'? – msw

Respuesta

3

Comprobación de diferentes ls salida enviaría un mensaje, incluso cuando se elimina o cambiado de nombre en el directorio de algo. En su lugar, podría buscar archivos con un mtime más nuevo que el último mensaje enviado.

He aquí un ejemplo en bash, se puede ejecutar cada 5 minutos:

now=`date +%Y%m%d%H%M.%S` 

if [ ! -f "/path/to/cache/file" ] || [ -n "`find /path/to/build/dir -type f -newer /path/to/cache/file`" ] 
then 
    touch /path/to/cache/file -t "$now" 
    sendmail -t <<< " 
To: [email protected] 
To: [email protected] 
Subject: New files found 

Dear friend, 
I have found a couple of new files. 
" 
fi 
+0

[¿Cómo se vería en el script de shell C] (http://stackoverflow.com/questions/3692137/whats-wrong-with-this-c-shell-script)? – Lazer

1

¿No puede ser un simple script de shell?

while :;do 
     n = 'ls -al path-to-dir | wc -l' 
     if n -gt old_n 
    # your Mail code here; set old_n=n also 
     fi 
    sleep 5 
done 
0

Sí, un bucle en Perl como se describe haría el truco.

Puede mantener un registro de cuándo se modificó por última vez el directorio; si no ha cambiado, no hay una nueva compilación. Si ha cambiado, es posible que se haya eliminado una versión anterior o se haya agregado una nueva. Probablemente no desee enviar alertas cuando se eliminen versiones antiguas; es crucial que el correo electrónico se envíe cuando se agreguen nuevas compilaciones.

Sin embargo, creo que msw tiene la idea correcta; la compilación debería notificar cuándo ha completado la copia al nuevo directorio. Debe ser una secuencia de comandos que se puede cambiar para notificar a la lista correcta de personas, en lugar de una lista de nombres con cable en el archivo MAKE o cualquier otro sistema de control de compilación que utilice.

5

Si va por perl, estoy seguro de que el excelente módulo File::ChangeNotify le será extremadamente útil. Puede usar inotify, si está disponible, pero también todo tipo de mecanismos de observación de archivos proporcionados por diferentes plataformas.Además, como alternativa, tiene su propia implementación de observación, que funciona en todas las plataformas, pero es menos eficiente que las especializadas.

0

puede usar dnotify es el predecesor de inotify y debe estar disponible en su kernel. Todavía es compatible con núcleos más nuevos.

Cuestiones relacionadas