2014-09-12 4 views
1

파일 크기가 한계에 도달하거나 다른 조건에 의해 취소 될 때까지 파일을 출력 할 수있는 사람이 누구인지 알고 있습니까? 이것이 가능한가?리눅스 : 파일에서 파이프 출력

파일 크기, 지속 시간 등과 같은 조건으로 파일 출력 ('$ cmd >> file.txt 2> & 1')을 취소하려면 어떻게해야합니까?

편집 : 응용 프로그램을 시작하면 응용 프로그램 자체를 멈추지 않고 첫 번째 ~ 1000 줄의 출력이 필요합니다! 로깅 완료 응용 프로그램 수명은 필요하지 않습니다.

답변

3

예 :이 somefile에 서열에서 모든 데이터를 캡처하고 1,000 선이 표준 출력에 인쇄됩니다

seq 10000 | tee -i somefile | head -n 1000

그러나 나는 SIGPIPE를 무시하기 위해 trap를 호출합니다. 인터럽트를 무시하기 위해 tee -i를 사용해야합니다. 그렇지 않으면 헤드가 끝날 때 see를 인터럽트하는 tee를 인터럽트합니다.

+0

그러나 예에서'seq'는 작업이 끝나고 OP는'응용 프로그램 자체를 멈추지 않고 보길 원합니다! ' –

+0

네가 맞다. – sashang

+0

@skwllsp 'tee -i'를 사용하도록 변경했습니다. seq를 계속 허용해야합니다. – sashang

1

시간 제한의 경우 timeout을 사용하십시오. 크기 제한의 경우 tee --max-bytes을 사용하십시오.

로그 파일 관리 무엇 당신이 찾는 당신이 등 회전, 크기, 시간, 나는 멈추지 않고, 출력의 첫 번째 ~ 1000 선이 필요

+1

http://linux.die.net/man/1/tee에는'--max-bytes'가 언급되어 있지 않습니다. 내 RHEL에서도 사용할 수 없습니다 :'tee : unrecognized option '--max-bytes'' –

+0

http://linux.die.net/man/1/timeout 또한 명령을 죽이기 때문에 cmd 또한 앱을 죽일 것입니다. – user3280180

+0

+1 rsyslogd가 작업에 적합한 도구입니다. – msw

1

로그를 들어, 처리 rsyslogd을 사용하는 것이 좋습니다 경우 응용 프로그램 자체!

1) 이 작업을 수행하는 간단한 방법은 두 가지 규칙으로 sed에 연결하는 것입니다. 첫 번째 규칙 '1,1000w head-lines.txt'는 head-lines.txt 파일에 저장되며, 두 번째 규칙은 인쇄에 사용됩니다.

파일에 쓰기 처음 1000 선, 인쇄 모든 라인 : 1001부터

$ seq 1000000000000 | sed -n -e '1,1000w head-lines.txt' -e '1,$p' 

쓰기 파일로 처음 1000 선, 인쇄 모든 라인 :

$ seq 1000000000000 | sed -n -e '1,1000w head-lines.txt' -e '1001,$p' 

참고 :

2) 좀 더 복잡한 방법은 bash에서 SIGPIPE를 처리하는 것입니다. 배쉬에서 나는 내 서버에 오랫동안 실행 seq 100000000을 실행하고 파일에 출력의 처음 1000 선을 얻을 :

$ trap "" SIGPIPE && seq 100000000 2>/dev/null | head -n 1000 > your.log 

이 때 head가 종료됩니다 처음 1000 선을 얻을 것이다 일반적 SIGPIPE가 seq로 전송됩니다.

$ help trap 
trap: trap [-lp] [[arg] signal_spec ...] 
    Trap signals and other events. 

    If ARG is the null string each SIGNAL_SPEC is ignored by the 
    shell and by the commands it invokes.