cómo monitorear un archivo en Java mientras se actualiza mediante un script de shell

Tengo un archivo de registro que será actualizado por un script de shell. Este script de shell tiene varias operaciones y actualiza el archivo después de cada operación, indicando que la operación ha finalizado. Ahora, necesito "escuchar" en este archivo desde un servlet y enviar la respuesta al usuario final de la misma manera que ocurre el registro (es decir, la operación A finalizada, la operación B finalizada, etc.). Ahora, si tanto el servlet como el script de shell intentan abrir el archivo al mismo tiempo, estoy seguro de que obtendré algún error. En Java, supongo que puedo manejarlo como IOException y seguir intentando leer el archivo, para que funcione cuando el script de shell no está actualizando el archivo. ¿Cómo debo manejar esto en el script de shell? ¿Ayudará si abro el archivo en modo de solo lectura en Java? También tenga en cuenta que el script de shell solo escribe y no lee y el servlet solo lee y no lee

Además, las sugerencias son bienvenidas sobre una mejor manera de implementar este flujo de trabajo.

Respuesta 1

Como no puede usar WatchService, puede sondear los archivos usando la última modificación file.lastModified().

Si hace esto periódicamente, puede comparar los resultados y si cambiaron, el script de shell modificó el archivo. Es posible que sea necesario crear un nuevo objeto File cada vez que realice una encuesta, pero dado que el archivo no está abierto para lectura, no se producirán problemas de acceso.

Sin embargo, incluso si abre el archivo y compara su contenido, no debería experimentar ningún problema de acceso, a menos que su shell abra el archivo con acceso exclusivo.

Respuesta: 2

¿Cómo podría justificar algunos números correctamente? No entiendo. Soy realmente nuevo en Java. : - / Por ejemplo, cada vez que trato de hacer que este código esté justificado me da errores. Aquí hay una muestra ...

Actualmente estoy trabajando con tarjetas sin contacto DESFire EV1. Estoy tratando de descifrar un DES / CBC cifrado random_b con masterkey: "00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00". Estoy usando esto ...

En Apache Tomcat / 9.0.14, creé un servlet muy simple para ejecutar, pero recibí un error: el servidor de origen no encontró una representación actual para el recurso de destino o no está dispuesto a revelarlo ...

¿Hay una buena manera de combinar ByteBuffer y FloatBuffer? Por ejemplo, obtengo datos de bytes [] y necesito convertirlos en datos flotantes [] y viceversa: bytes [] a flotantes [] (java.lang ...