출력을 생성하는 명령에 영향을 미치지 않고 출력을 더 적게 추적하는 방법은 무엇입니까?


12

서버를 실행 중이며이 서버의 로그는 파일이 아닌 터미널에 로그인됩니다. 이 로그를보다 적게 사용하고 싶습니다.

node server.js | less

로그를보고 싶을 때 Shift+ F를 사용 하여 파일을 끝내고 로그를 계속 지켜보십시오. 멈추고 싶을 때는 CTRL+를 사용 C합니다.

불행히도 이로 인해 서버도 중지됩니다. 서버를 멈추지 않고 로그 끝을 보는 것을 멈추고 싶습니다.

이것을하는 방법?


1
서버가 백그라운드에서 실행중인 상태에서 종료 less하고 쉘 프롬프트로 돌아가시겠습니까, 아니면 최신 라인을 보지 않고 로그를 스크롤 할 수있는 일반 비 팔로 잉 모드로 돌아가시겠습니까? nodeless
바이트 사령관

CTRL + C를 누르면 @ByteCommander가 나타납니다. 서버가 계속 실행되기를 원하며 스크롤이 가능한 일반적인 비추 종 모드로 돌아가고 싶습니다.
Ajay Kumar

답변:


17

에서 F모드 를 종료하는 방법을 찾을 수 없으므로 less해결 방법을 사용해야합니다. 예를 들어, 출력을 tmp 파일에 저장 한 다음 해당 tmpfile을 대신보십시오.

node server.js > tmpfile & less tmpfile

&차종 node.js백그라운드에서 실행 명령을 사용합니다. 즉, less tmpfile즉시 시작되고 tmpfile을 추적합니다.

한 번 less, 당신은 누르면 F현재 추적 모드로 들어갈 수 있지만, Ctrl+ C그것은 단지 추적을 중지합니다 서버를 죽이지 않을 것이다. 원하는대로 스크롤 할 수 있으며 F다음을 다시 시작하기 위해 적중 할 수 있습니다 .


13

일반적으로 "영원히 앞으로"모드를 종료하지 않는 것 같습니다 . +를 man less누르면 수동으로 입력하는 모드의 이름이 수동으로 지정됩니다 .ShiftF

그러나 어쨌든 정상적인 상태로 돌아갈 수있는 방법이 조금 더러운 것을 발견했습니다. 그래도 명령이 잠깐 멈추므로 서버가 중단없이 실행될 수 있는지 확실하지 않습니다.


어쨌든, 여기 속임수가 있습니다 :

나는 당신이 node server.js | less벌써 시작 하고 Shift+ F를 눌러 "영원히 앞으로"모드로 들어간 것으로 가정 합니다. 이제 less더 이상 키 누르기에 반응하지 않습니다.

이 상태에서 Ctrl+ C를 누르면 서버 프로세스가 종료 less되고 다음을 눌러 나중에 종료 할 수 있습니다. Q(어떤 이유로 든 명령을 작업 목록에서 중지 된 프로세스로 남겨 두십시오. fg계속 진행하려면 완전히 실행 해야합니다. 나중에 종료), 그러나 이것은 우리가 원하는 것이 아닙니다 .

대신 Ctrl+ Z를 눌러 명령을 중지 ( "고정")하고 쉘 프롬프트로 돌아갈 수도 있습니다. 이제 신속하게 쉘 명령을 입력 fg( " F 광석 g 명령이 포 그라운드에서 계속 실행 수 있도록 라운드"). 당신의 것을 참고 node서버 프로세스는이 짧은 시간 동안 일시 정지, 당신이 허용인지 여부를 고려해야한다.

이제 less전과 같이 전경에서 다시 실행되고 있습니까? 예, 그러나 마술 적으로는 더 이상 "영원히 앞으로"모드가 아닙니다. 예를 들어 화살표 키를 다시 사용하여 위아래로 스크롤 할 수 있습니다.

불행히도, less버퍼 업데이트를 완전히 중단 한 것으로 보이며, 더 이상 명령을 얼린 줄까지 아래로 스크롤 할 수 있습니다. node서버는 계속 실행하고, 우리가 가야하지만 출력을 생산하고 less다시 새로 고침.

내가 찾은 가장 쉬운 방법 less은 키를 H누르고 Q순차적으로 '도움말 화면을 열고 다시 닫는 것 입니다. 이제 모든 것이 다시 잘 작동하는 것 같습니다.


그러나 가장 깨끗한 해결책은 아마도 terdon의 대답 을 따르고 파일 less을 모니터링하는 데 사용하여 출력을 임시 파일로 리디렉션하는 것 입니다.


다소 화려한 더러운 핵.
TRiG

나는이 대답을 수용 된 것보다 선호한다고 생각합니다. %오히려 당신은 실행할 수 있습니다 fg; 타이핑하기가 더 쉽고 빠릅니다. 또한 F(shift-f)는 hq트릭 을 수행하지 않아도 여전히 작동 하는 것으로 보입니다 . 좋은! 이제 로그를 팔로우 할 때 할 수있는 ctrl-z % Enter일을 줄이고 적은 일을 한 다음 쳐서 다음으로 돌아갑니다 F.
JoL

BTW, 더럽게 부르면 안됩니다. 개인적으로, 이것은 다른 솔루션보다 깨끗해 보입니다. 여기서 파일 시스템을 임시 파일로 (이름을 생각하고 제거 해야하는) 파일을 버릴 필요가 없습니다. 특히 less'의 팔로우 를 사용하고 싶을 때 동시에 여러 터미널에서 기능.
JoL

2
소스를 보지 않았지만 TSTP신호가 새 데이터가 도착하기를 기다리는 읽기 시스템 호출을 방해 하기 때문에 작동합니다 . less0 바이트를 수신하고 출력이 종료되었다는 결론을 내립니다. 서버를 일시 정지하지 않으려면 새 터미널 창을여십시오. ps프로세스의 프로세스 ID를 실행 하고 식별합니다 less. 그런 다음을 입력하십시오 kill -TSTP <PID>; kill -CONT <PID>. 이렇게하면 입력하는 동안 지연없이 신호가 다시 전달됩니다.
Alexis

@alexis를 사용하려는 경우 kill대신 SIGINT를 보낼 수 있습니다. 그럼 당신은 보낼 필요가 없습니다 CONT, less당신을 기다리고 있습니다.
muru

3

귀하의 질문에 따르면 :

이 서버는 파일이 아닌 터미널에 로그인됩니다.

나는 (temp) 로그 파일을 사용하고 싶지 않다고 가정합니다. 아마도 로그가 크거나 어떤 이유로 든 있습니다.


명명 된 파이프, fifo파일.

내가 생각해 낸 named pipe file것은 fifo파일 이라고도하는 파일을 사용하는 것입니다.이 파일은 로그를 적게 파이프하는 데만 사용되며 아무것도 저장되지 않습니다.

먼저 fifo file:

mkfifo mylog

서버를 실행하고 로그를이 파일로 경로 재 지정하십시오.

node server.js > mylog &

less를 사용하여 로그를 읽습니다 (-f는이 특수 파일을 덜 읽습니다).

less -f mylog

이제 shift+ F를 사용 하여 추적을 수행하고 CTRL+ C를 사용 하여 추적 을 중지 할 수 있지만 서버가 계속 실행 중이므로 shift+로 출력을 다시 추적 할 수 있습니다 F.


백업 계획 : 서버를 중지 한 경우 명령 ( node server.js > mylog &)을 파일 (예 :)에 넣고 run : server.sh대신 node server.js > mylog &run : bash server.sh > mylog &을 실행하십시오 less -f mylog.


여기에 일반 파일 대신 fifo를 사용하는 이유는 무엇입니까? 내가 볼 수있는 유일한 이점은 디스크 공간을 절약하는 것입니다. 그러나 이것이 이와 관련이 있는지 의심 스럽습니다. 작업을 마친 후에도 파일을 수동으로 삭제해야합니다.
terdon

2
아무도 로그 데이터를 요청하지 않을 때 FIFO 버퍼가 가득 차면 서버 프로세스가 중단 될 수 있으므로 FIFO를 사용하지 않는 것이 좋습니다. 로그 파일 크기가 문제가되면 실제로 적절한 로그 파일에 플러스를 사용해야합니다 logrotate.
David Foerster

@terdon 당신이 유일한 요점은 디스크를 저장하는 것이라고 말했듯이, OP는 그의 로그가 디스크에 저장되기를 원하지 않는다고 생각했습니다.
Ravexina

@DavidFoerster +1 Good Point;)
Ravexina
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.