Soy nuevo en el comando dnotify/inotify. ¿Alguien puede ayudarme a escribir un guión de modo que monitoree continuamente un directorio e indique que hay algún cambio o modificación en él?Cómo supervisar continuamente el directorio utilizando el comando dnotify/inotify
Respuesta
Inotify es un módulo kernel accesible a través de llamadas desde, por ejemplo, un programa C http://www.ibm.com/developerworks/linux/library/l-ubuntu-inotify/
Hay un conjunto de aplicaciones llamada inotify-herramientas, que contiene:
inotifywait - esperar a cambios en los archivos usando inotify
y
inotifywatch - recopilar estadísticas de acceso de sistema de archivos utilizando inotify
Puede utilizar inotify directamente desde la línea de comandos, por ejemplo, como este para monitorear de forma continua durante todos los cambios en el directorio inicial (puede generar gran cantidad de salida):
inotifywait -r -m $HOME
Y aquí es un script que monitorea continuamente y reacciona a la actividad de registro de Apache, copiado del archivo de hombre de inotifywait:
#!/bin/sh
while inotifywait -e modify /var/log/messages; do
if tail -n1 /var/log/messages | grep httpd; then
kdialog --msgbox "Apache needs love!"
fi
done
A continuación se muestra lo que uso para ver las operaciones en un archivo individual. "-m" causa monitoreo vs. salida después de solo un evento. Para obtener marcas de tiempo, necesita al menos la versión 3.13 de inotify-tools, pero si eso no es importante (o no está disponible en su sistema operativo o es difícil actualizarlo) puede omitir las opciones timefmt y format. "/etc/resolv.conf gato" en la otra línea de comandos conduce a los resultados siguientes:
$ inotifywait -m --timefmt '%H:%M' --format '%T %w %e %f' /etc/resolv.conf
Setting up watches.
Watches established.
12:49 /etc/resolv.conf OPEN
12:49 /etc/resolv.conf ACCESS
12:49 /etc/resolv.conf CLOSE_NOWRITE,CLOSE
inotifywait tiene opciones para el seguimiento de directorios, así, a fin de comprobar la página de manual. Add -r para recursivo para supervisar hijos de un directorio.
He aquí un ejemplo con los comandos que he escrito en una ventana diferente se muestra con "->" prefijo:
$ inotifywait -mr --timefmt '%H:%M' --format '%T %w %e %f' /home/acarwile/tmpdir
Setting up watches. Beware: since -r was given, this may take a while!
Watches established.
-> cd into directory, no info
-> ls in directory
13:15 /home/acarwile/tmpdir/ OPEN,ISDIR
13:15 /home/acarwile/tmpdir/ CLOSE_NOWRITE,CLOSE,ISDIR
-> touch newfile
13:16 /home/acarwile/tmpdir/ CREATE newfile
13:16 /home/acarwile/tmpdir/ OPEN newfile
13:16 /home/acarwile/tmpdir/ ATTRIB newfile
13:16 /home/acarwile/tmpdir/ CLOSE_WRITE,CLOSE newfile
-> mv newfile renamedfile
13:16 /home/acarwile/tmpdir/ MOVED_FROM newfile
13:16 /home/acarwile/tmpdir/ MOVED_TO renamedfile
-> echo hello >renamedfile
13:16 /home/acarwile/tmpdir/ MODIFY renamedfile
13:16 /home/acarwile/tmpdir/ OPEN renamedfile
13:16 /home/acarwile/tmpdir/ MODIFY renamedfile
13:16 /home/acarwile/tmpdir/ CLOSE_WRITE,CLOSE renamedfile
-> touch renamedfile
13:17 /home/acarwile/tmpdir/ OPEN renamedfile
13:17 /home/acarwile/tmpdir/ ATTRIB renamedfile
13:17 /home/acarwile/tmpdir/ CLOSE_WRITE,CLOSE renamedfile
-> rm renamedfile
13:17 /home/acarwile/tmpdir/ DELETE renamedfile
-> cd ..; rmdir tmpdir
13:17 /home/acarwile/tmpdir/ DELETE_SELF
Después de lo anterior, he tratado de rehacer el tmpdir ("mkdir tmpdir") pero no obtuve salida de eso. El nuevo tmpdir no es el mismo directorio que el antiguo tmpdir. El tiempo para simplemente^C y detenerlo no permite esperar.
Como dije en https://superuser.com/a/747574/28782, he hecho un script de ayuda que utiliza inotifywait sin algunas de sus limitaciones directas: inotifyexec
Ejemplo de uso (suponiendo que haya añadido en la ruta del sistema como ejecutable):
inotifyexec "echo test" -r .
- 1. Cómo supervisar el archivo de texto y salir continuamente del contenido en un cuadro de texto
- 2. PowerShell: Ejecute el comando desde el directorio de scripts
- 3. Cómo supervisar el cambio de estado SIM
- 4. C# leer continuamente el archivo
- 5. Eliminación de archivos utilizando el comando rm
- 6. utilizando OpenFileDialog para el directorio, no FolderBrowserDialog
- 7. Shell - ¿Cómo encontrar el directorio de algún comando?
- 8. Cómo sincronizar el directorio FTP desde la línea de comando?
- 9. Cómo supervisar el estado del MTA de Postfix
- 10. Reproducción de música continuamente con el nombre
- 11. Comando para comprimir un directorio utilizando un directorio específico como root
- 12. Plugin M2E actualizando continuamente el índice
- 13. El clip de audio no repetirá continuamente
- 14. Obtener el último comando de lote de directorio creado
- 15. un programa para supervisar un directorio en Linux
- 16. Python/wxPython: haciendo el trabajo continuamente en el fondo
- 17. Ejecutar comando para cada archivo en el directorio actual
- 18. ¿Cómo ejecutar un script PHP continuamente en el host web?
- 19. Cómo desplazar div continuamente en el evento mousedown?
- 20. Cómo desplazar automáticamente el contenido div de forma vertical continuamente
- 21. Aumenta continuamente el valor entero cuando se presiona el botón
- 22. Cómo supervisar el uso de memoria en heroku (Node.js)
- 23. ¿Cómo supervisar el grupo de conexiones activo en SQL Server?
- 24. Cómo usar QFileSystemWatcher para supervisar una carpeta para el cambio
- 25. Cómo supervisar el rendimiento de la instancia de Amazon ec2?
- 26. Uso de maven utilizando el diseño de directorio no estándar
- 27. ¿Cómo puedo hacer que el comando "buscar" en OS X sea el directorio actual?
- 28. Contar el número de archivos en un directorio utilizando Java
- 29. Cómo instalar C++ continuamente en Hudson/Jenkins
- 30. Cómo crear un directorio utilizando nerdtree
El ejemplo proporcionado en realidad no monitorea "continuamente" como se indica en la pregunta. Sale en el primer evento. En la práctica, algunos eventos pueden pasarse por alto mientras se está ejecutando la parte interna del 'do'. – Unode
No solo se pueden perder como lo dijo @Unode, sino que la inicialización tiene lugar cada vez que ocurre un cambio, por lo que no es un método eficiente. – Wernight
Para aclarar, los comentarios de @Unode y Wernight se aplican solo al último ejemplo en la publicación (la secuencia de comandos para reaccionar a los eventos de registro de Apache). – depquid