모범 사례: 로그 파일을 유지/회전하는 방법(리디렉션된 출력에서)

모범 사례: 로그 파일을 유지/회전하는 방법(리디렉션된 출력에서)

위 주제에 대한 몇 가지 질문을 읽었지만 실제로 내 질문에 답변이 되는지 잘 모르겠습니다.

애플리케이션을 실행하고 출력을 로그 파일로 리디렉션하고 있습니다.

nohup ./start.sh ./config/s.properties >./logs/app.log 2>&1 &

현재 파일 크기가 80GB인데 삭제하고 싶습니다. 여기에 있는 대부분의 답변은 데이터가 "삭제된" 파일에 계속 기록되므로 삭제하지 않는 것이 좋습니다. 대답은 대신 logrotate를 사용하는 것을 제안하지만 logrotate가 출력 리디렉션에 작동하는지 궁금합니다.

작동한다면 구성은 어떤 모습일까요? 회전 후 명령이 필요합니까? 실행 중인 애플리케이션을 중지했다가 다시 시작하는 것이 불가능하므로 파일을 "훔치고" 실행 중인 애플리케이션이 새 파일을 쓰도록 하고 싶습니다.

logrotate가 해결책이 아닌 경우 어떻게 해야 합니까? 실행 중인 애플리케이션을 중지했다가 다시 시작할 수 없으므로 파일 크기를 줄일 수 있습니까?

도와주셔서 감사합니다!

추신: 애플리케이션이 Debian8 64 운영 체제에서 실행된다는 점만 언급해 주세요.

답변1

프로세스에 파일 핸들이 열려 있는 동안 파일을 삭제하면 Linux는 프로세스가 파일 핸들을 닫을 때까지 디스크의 내용을 유지합니다. long의 기존 내용을 유지하지 않으려면 간단히 잘라낼 수 있습니다.

> ./logs/app.log 
# or
truncate -s 0 ./logs/app.log

그러면 파일의 기존 내용이 지워집니다.

관련 정보