Estoy ejecutando un servidor y el registro de este servidor se registra en la terminal, no en ningún archivo. Me gustaría usar menos para ver este registro.
node server.js | less
Cuando solo quiero ver el registro, utilizo presionar Shift+ Fpara llegar al final del archivo y seguir viendo registros. Cuando quiero detenerlo, uso CTRL+ C.
Desafortunadamente, esto también detiene el servidor. Solo quiero dejar de ver el final del registro sin detener el servidor.
¿Como hacer esto?
command-line
pipe
less
Ajay Kumar
fuente
fuente

lessy volver a su indicador de shell con elnodeservidor ejecutándose en segundo plano, o simplemente desealessvolver al modo normal que no sigue, donde puede desplazarse por el registro en lugar de mirar las últimas líneas?Respuestas:
No puedo encontrar ninguna forma de salir del
Fmodoless, por lo que tendrá que usar una solución alternativa. Por ejemplo, guarde la salida en un archivo tmp y luego mire ese archivo tmp en su lugar:El
&hace que elnode.jscomando ejecutar en segundo plano. Esto significa queless tmpfilecomenzará de inmediato y rastreará el archivo tmp.Una vez dentro
less, puede presionar Fpara ingresar al modo de seguimiento, pero ahora Ctrl+ Cno matará al servidor, solo detendrá el seguimiento. Ahora puedes desplazarte como quieras y presionar Fpara reanudar el seguimiento.fuente
Parece que normalmente no se supone que salgas del modo "Reenviar para siempre", que es cómo el manual
man lessnombra el modo que ingresas al presionar Shift+ F.Sin embargo, encontré un pequeño truco sucio de cómo puedes volver a la normalidad de todos modos. Sin embargo, congelará brevemente el comando, por lo que no estoy seguro de si sería adecuado para su servidor, que probablemente debería ejecutarse ininterrumpidamente.
De todos modos, aquí está el truco:
Supongo que ha comenzado
node server.js | lessy presionado Shift+ Fpara ingresar al modo "Reenviar para siempre". Ahoralessya no reacciona a ninguna pulsación de tecla.En este estado, puede presionar Ctrl+ Cpara eliminar el proceso del servidor y luego puede salir
lesspresionando Q(lo que sin embargo, por alguna razón, dejará el comando como proceso detenido en su lista de trabajos; debe ejecutarlofgpara continuarlo y dejarlo completamente terminar después), pero esto no es lo que queremos.En su lugar, también puede presionar Ctrl+ Zpara detener ("congelar") el comando y regresar a su indicador de shell. Ahora escriba rápidamente el comando shell
fg( " f mineral g ronda") para permitir que el comando siga funcionando en primer plano. Tenga en cuenta que sunodeproceso de servidor también está en pausa durante este corto tiempo, debe considerar si esto es aceptable o no.Así que ahora se
lessestá ejecutando en primer plano de nuevo como antes, ¿verdad? Sí, pero mágicamente ya no está en modo "Reenviar para siempre". Puede usar, por ejemplo, las teclas de flecha nuevamente para desplazarse hacia arriba y hacia abajo.Desafortunadamente,
lessparece haber dejado de actualizar su búfer por completo, solo puede desplazarse hacia abajo hasta la línea en la que congeló el comando anteriormente, no más. Sinnodeembargo, el servidor todavía se está ejecutando y produciendo resultados, solo tenemoslessque actualizar nuevamente.La forma más fácil de hacerlo es simplemente abrir
less'pantalla de ayuda y cerrarla nuevamente, presionando las teclas Hy Qsecuencialmente. Ahora todo parece estar funcionando bien nuevamente.Sin embargo, la solución más limpia probablemente sea seguir la respuesta de terdon y redirigir la salida a un archivo temporal,
lesspara monitorear el archivo.fuente
%lugar defg; Me resulta más fácil / rápido escribir. También parece queF(shift-f) todavía funciona incluso sin hacer elhqtruco. ¡Agradable! Ahora, cuando sigo los registros, puedoctrl-z%Enter, hacer lo menos posible, ¡y luego volver a seguir presionandoF!lessel seguimiento de característica en múltiples terminales al mismo tiempo.TSTPseñal interrumpe la llamada al sistema de lectura que estaba esperando que llegaran nuevos datos;lessrecibe 0 bytes y concluye que la salida ha finalizado. Para evitar pausar el servidor, abra una nueva ventana de terminal; ejecutarpse identificar el id dellessproceso; luego escribekill -TSTP <PID>; kill -CONT <PID>. De esta manera, las señales deben enviarse de forma consecutiva, sin demora mientras está escribiendo.kill, puedes enviar SIGINT en su lugar. Entonces no necesitarás enviarCONT, ylesssolo te está esperando.Como dice tu pregunta:
Supongo que no desea utilizar un archivo de registro (temporal), tal vez su registro es enorme o por cualquier razón que tenga.
Pipa con nombre,
fifoarchivo.Lo que se me ocurrió es usar un archivo
named pipe filetambién conocidofifo, este archivo solo se usará para canalizar sus registros a menos, y no se guardará nada en él.Primero crea un
fifo file:Ejecute su servidor y redirija los registros a este archivo:
Use less para leer sus registros (-f fuerza menos para leer este archivo especial):
Ahora puede usar shift+ Fpara seguir y CTRL+ Cpara detener el seguimiento, pero el servidor aún se está ejecutando, puede seguir la salida nuevamente con shift+ F.
Plan de copia de seguridad : si detuvo su servidor, simplemente coloque su comando (
node server.js > mylog &) en un archivo, por ejemplo:,server.shluego, en lugar de ejecutarnode server.js > mylog &run:bash server.sh > mylog &y luego ejecute elless -f mylog.fuente
logrotate.