내 응용 프로그램을 종료하지 않고 nohup.out 파일을 회전시키는 방법 중입니다. 이제 nohup.out응용 프로그램을 종료하지 않고 파일 을

nohup.out파일이 빠르게 커지고 있습니다.

백그라운드에서 응용 프로그램을 실행 중입니다. nohup.out파일을 작성 중입니다.

이제 nohup.out응용 프로그램을 종료하지 않고 파일 을 회전해야 합니다. 이것을 할 수 있습니까?



답변

flog를와 함께 보아야 logrotate합니다. 이것을 통해 응용 프로그램 출력을 파이프하면 SIGHUP실행중인 응용 프로그램을 종료하지 않고도 flog 프로세스를 수행 할 수 있습니다 .

flog (파일 로거)는 STDIN에서 입력을 읽고 파일에 쓰는 프로그램입니다.

SIGHUP이 수신되면 파일이 다시 열리고 로그 회전이 가능합니다 [RH의 logrotate (8) 참조].

로그 파일은 flog에서 회전이 발생했음을 감지 한 경우에만 다시 열립니다 (예 : 이전 파일이 없거나 inode가 변경됨). flog는 매우 작습니다 (500 바이트 미만의 메모리 풋 프린트).


답변

회전시킬 수 없습니다. 명령을 사용하여자를 수 있으며 >nohup.out파일의 모든 내용이 삭제됩니다.

출력을 저장해야하는 경우 파일을 먼저 복사 한 다음자를 수 있습니다. 그러나 레이스를위한 작은 창이 있는데, 파일을 복사 한 후 잘라 내기 전에 출력을 쓸 수 있습니다. 해당 기간 동안 작성된 모든 출력은 영구적으로 손실됩니다.


답변

당신은 할 수 없습니다.

파일 (rm)을 링크 해제 할 수 있지만 데이터는 여전히 디스크에 설치 공간을 가지고 있으며 열린 파일 핸들이있는 한 계속 기록됩니다.

파일 이름을 바꿀 수는 있지만 다시 파일 쓰기가 중지되지는 않습니다 (그러나 백그라운드 작업을 정기적으로 시작하는 경우 최신 작업이 동일한 파일에 작성 됨).

실제로 작업의 출력을 이것을 처리하도록 설계된 것으로 명시 적으로 리디렉션해야합니다 (예 : apache rotatelogs ).


답변

내가 너무 늦었는지 확실하지 않습니다. 그러나이 포럼을 우연히 발견 한 다른 사람들을 위해, 나는 flog 나 다른 것을 시도하지 않아도됩니다.

내 직업은 다음과 같이 간단하게 시작됩니다.

nohup <my process> &

이것은 내 작업을 시작하고 해당 디렉토리의 nohup.out에 추가하기 시작합니다.

내가해야 할 일은 일반적으로 배포판과 함께 제공되는 logrotate를 설정하고 다음과 같이 구성하는 것입니다. /etc/logrotate.conf

~/my abosolute path/nohup.out {
    size 1024k
    copytruncate
    rotate 100
    maxage 100
}

그리고 그것은 일했다!! 동일한 파일에서 새 추가를 가져 오는 동안 nohup.out이 잘 렸습니다. 프로세스도 죽지 않았습니다. 그리고 이와 같은 새로운 nohup.out nohup.out-20190528이 만들어졌습니다.

도움이 되었기를 바랍니다.


답변

Logrotate에는 사용 가능한 copytruncate 옵션이 있습니다.이 옵션은 지정된 파일이 정상 회전 (설정된 경우 압축) 구성표에 복사 된 후 지정된 파일을 잘라냅니다 (비 웁니다).

   copytruncate
          Truncate  the  original log file in place after creating a copy,
          instead of moving the old log file and optionally creating a new
          one,  It  can be used when some program can not be told to close
          its logfile and thus might continue writing (appending)  to  the
          previous log file forever.  Note that there is a very small time
          slice between copying the file and truncating it, so  some  log-
          ging  data  might be lost.  When this option is used, the create
          option will have no effect, as the old log file stays in  place.

로부터 logrotate에 맨 .


답변

다음과 같이 할 수 있습니다 :

cp nohup.out nohup.out.save # save it somewhere
echo "" > nohup.out

앱을 죽일 필요는 없습니다.


답변