2014-03-05 5 views
10

강제 실행 후 my_app.log 대신 my_app.log.1 (이전에 보관해야하는 이전 로그)에 계속 기록합니다.logrotate를 실행 한 후 ".log"파일 대신 ".log.1"파일에 쓰기

이렇게하면 logrotate이 아무런 영향없이 실행되기 때문에 my_app.log이 빈 파일이됩니다. my_app.log.1은 계속해서 기가 바이트로 증가합니다.

저는 Ubuntu 12.04를 실행하고 있습니다. 내 앱은 pm2을 사용하는 Node.js 앱입니다. 나는 내가 거기 notifempty를 넣어 알고

"/var/log/my_app/*.log" { 
    daily 
    size 50M 
    rotate 10 
    missingok 
    compress 
    delaycompress 
    notifempty 
} 

, 그런데 왜 my_app.log.1는 처음에 기록됩니다 : 다음은 내 logrotate에 구성입니다?

+0

응용 프로그램이 실행되는 동안 로그 파일을 열어두면 변경되는 파일 이름의 영향을받지 않습니다. 파일에 계속해서 씁니다. 'logrotate'는 파일 이름을 변경 한 후 응용 프로그램을 다시 시작하도록 (또는 응용 프로그램이 응답 할 경우'HUP '신호를 보내도록) postrotate 스크립트에서 구성 할 수 있습니다. 설명서에 예제가 있습니다. – axiac

답변

16

마침내 문제를 해결하는 방법을 알아 냈습니다.

로그 파일이 pm2에 의해 작성 되었기 때문입니다. logrotatemy_app.log.1으로 이름이 바뀌었고 새 my_app.log 파일을 만들었지 만 pm2은이 점에 대해 신경 쓰지 않았고 my_app.log.1에 계속 쓰고있었습니다.

notifempty 옵션을 copytruncate으로 바꾼 다음 pm2을 다시 시작하여 문제를 해결했습니다. 수정 후 notifempty을 다시 추가 할 수는 있지만 실제로 필요하지는 않습니다.

자세한 내용은 logrotate reference을 참조하십시오. 희망이 다른 사람들이 비슷한 문제를 얻는 데 도움이됩니다.