Supervisión de actualizaciones de archivos de registro desde la consolaCon JMP 17.2.0, estoy intentando monitorear la salida de un archivo de registro JSL desde una consola (Mac OS Terminal, en este caso). estoy usando el cola comando con el -F opción para ver en vivo las actualizaciones cada vez que se escribe el archivo.
$ tail -f log.txt
Sin embargo, la salida de la consola nunca se actualiza cuando se escribe texto nuevo en el registro. El JSL de ejemplo siguiente genera una línea de texto cada segundo:
Open Log();
Clear Log();
For( ii=0, ii<10, ii++,
Write( "hello, world " || Char( ii ) || "\!n" );
Save Log( "log.txt" );
Wait( 1 );
);
Cuando inicio el script, ejecuto el cola comando unos segundos más tarde, obtengo el resultado esperado:
$ tail -f log.txt
/*:hello, world 0
hello, world 1
hello, world 2
hello, world 3
Pero los mensajes de registro JSL posteriores no son recogidos por el cola dominio. Si yo Ctrl-C salir, luego volver a ejecutar cola , obtengo correctamente todo el resultado en el archivo de registro en ese momento. Pero el resultado nunca más se actualiza.
¿Alguna idea de por qué esto no funciona? ¿O tal vez exista otra forma de administrar un archivo de registro en el que funcione como se esperaba?
Automatización y secuencias de comandosMac OSRe: Monitorear actualizaciones de archivos de registro desde la consolaEl uso de la "versión powershell de tail" parece funcionar bien (esto no se ejecutará a menos que el archivo exista primero)
Get-Content -Path "<logfilepath>" -Wait
https://stackoverflow.com/questions/4426442/unix-tail-equivalent-command-in-windows-powershell
Escribí el registro con
Names Default To Here(1);
For(i = 1, i <= 30, i++,
Show(i);
wait(1);
Save Log("$TEMP/jmplog/log.txt");
);
Puede verificar manualmente que el archivo de registro se esté actualizando como cree y, si ese es el caso, comenzar a descubrir qué está mal con tail. ¿Podría guardar el registro, por ejemplo, recrear el archivo cada vez y dejar de lado el seguimiento en vivo debido a eso?
Normalmente, cuando escribo registros desde JMP utilizo Guardar archivo de texto() . Primero cree el archivo con encabezados (si los tengo) y luego use el modo ("añadir") para agregar nuevas líneas. Solo si quería obtener todo el contenido del registro, usaba Save Log() (por ejemplo, guardar el registro cuando el código tenía errores). Obtener registro() También puede resultar útil a veces.
Editar: ¿Quizás cambiar -f a -F podría ayudar? https://man7.org/linux/man-pages/man1/tail.1.html
-f, --follow[={name|descriptor}]
output appended data as the file grows;
-F same as --follow=name --retry
--retry
keep trying to open a file if it is inaccessibleRe: Monitorear actualizaciones de archivos de registro desde la consola@SteveTerry Si es porque JMP está reemplazando el archivo y tail no puede adherirse al nuevo archivo (parece probable), entonces (pseudocódigo, aproximadamente) algo como esto:
xxx = get log text();
clear log(); // so each chunk is appended only once
savetextfile("log.txt", xxx, mode("append") );
alternativamente, puedes usar watch, algo como
watch tail log.txt
para volver a ejecutar el comando tail cada pocos segundos. Más fácil, pero no tan eficiente.
Re: Monitorear actualizaciones de archivos de registro desde la consolaGracias @jthi , el -F La opción es lo que hizo que funcionara. No estoy seguro de por qué no me di cuenta de eso en el hombre página, probablemente porque he estado usando -F durante décadas y no estaba interesado en pensar fuera de lo común. Para tu información, el --rever la opción no existe en Mac; ¿Parece que estás usando JMP en un entorno Linux? Me gustaría saber más sobre eso.
yo suelo Guardar archivo de texto() bastante iterativamente para crear scripts JSL dinámicamente, pero no creo que sea apropiado aquí ya que no captura el material enviado al registro, por ejemplo, Escribir() y Espectáculo() , por lo que sería doble trabajo.
@Craige_Hales , gracias por tus sugerencias. Para tu información, mirar no aparece en Mac (de todos modos, para instalaciones básicas; tal vez podría instalarlo manualmente), aunque lo veo en Ubuntu. Oh, ¿de alguna manera estás combinando JMP con Linux también? 
Como ambos indican, parece que Guardar registro() está reescribiendo el archivo de una manera que le dé un nuevo inodo, que cola -f pierde. Esto parece muy ineficiente. Me imagino cómo esto podría ser útil en algunas circunstancias en las que se produce mucha manipulación del búfer de registro, como el borrado periódico. Pero creo que, para la mayoría de las aplicaciones, sería preferible si existiera un mecanismo de vaciado del búfer del registro en un archivo preasignado. Mi código realmente tiene problemas Guardar registro() comandos con mucha frecuencia para capturar la actividad reciente en caso de una falla en el tiempo de ejecución (para poder identificar qué estaba haciendo por última vez antes de la falla). Ahora parece que eso está creando mucha paliza en el disco. ¿Es esta posiblemente una característica nueva que quisiera sugerir?
Re: Monitorear actualizaciones de archivos de registro desde la consolaEjecuto JMP en Windows ejecutándose en VirtualBox en Linux. ¿Puede JSL comunicarse con Linux?Por ejemplo.
Creo que el deseo que quizás desee agregar es que JMP también pueda escribir un registro de archivos de disco, en paralelo con la ventana de registro, posiblemente vaciando la salida en cada línea.
Re: Monitorear actualizaciones de archivos de registro desde la consolaEstoy ejecutando JMP en Windows. Acabo de buscar en Google cola y verifiqué esa página de manual (aunque la he usado con cygwin para monitorear los registros).
Re: Monitorear actualizaciones de archivos de registro desde la consolaSe agregó esta función a la Lista de deseos en caso de que alguien quiera comentarla o votarla.
https://community.jmp.com/t5/JMP-Wish-List/Provide-option-to-write-log-file-to-disk-in-parallel-with-the/idi-p/701103