로그 크기가 증가한 후 로그를 회전하기 위해 다음과 같이 1M
cronjob이 15분마다 호출됩니다.logrotate
0,15,30,45 * * * * /usr/sbin/logrotate /app/syslog-ng/custom/conf/syslog-ng-rotate.conf
syslog-ng-rotate.conf
어디
/app/syslog-ng/custom/output/all_devices.log {
size 1M
copytruncate
dateext
dateformat -%Y%m%d-%s
rotate 365
sharedscripts
compress
postrotate
/app/syslog-ng/sbin/syslog-ng-ctl reload
endscript
}
1M
하지만 파일 크기가 15분 이내이면 위 구성이 작동하지 않습니다.
파일 크기에 도달하자마자 파일이 회전되도록 하려면 어떻게 해야 합니까 1M
?
답변1
logrotate는 실행하라고 지시한 경우에만 실행됩니다. 로그 파일이 빠르게 증가할 가능성이 있고 cron을 사용하는 경우 다음 두 가지 제안 사항이 있습니다.
크론 작업을 더 자주(예: 1분마다) 예약합니다.
* * * * * /usr/sbin/logrotate /app/syslog-ng/custom/conf/syslog-ng-rotate.conf
이렇게 하면 크기 제한에 도달하기 전에 로그 파일이 커지는 데 최대 60초가 소요됩니다.
로그 파일이 여전히 분당 너무 빠르게 증가하는 경우 logrotate를 분당 여러 번 실행하고 다음 단계를 실행하십시오.
* * * * * /usr/sbin/logrotate /app/syslog-ng/custom/conf/syslog-ng-rotate.conf; /usr/sbin/logrotate /app/syslog-ng/custom/conf/syslog-ng-rotate.conf; /usr/sbin/logrotate /app/syslog-ng/custom/conf/syslog-ng-rotate.conf
(예를 들어) 또는:
* * * * * /usr/sbin/logrotate /app/syslog-ng/custom/conf/syslog-ng-rotate.conf; sleep 10; /usr/sbin/logrotate /app/syslog-ng/custom/conf/syslog-ng-rotate.conf; sleep 10; /usr/sbin/logrotate /app/syslog-ng/custom/conf/syslog-ng-rotate.conf
...logrotate 호출 사이에 10초.노트단일 크론 작업이 60초 이상 걸리는 것을 원하지 않습니다. 그렇지 않으면 다음 크론 작업과 겹치게 됩니다. 전체 cron 작업을 다음으로 래핑하는 것을 고려하십시오
timeout
.* * * * * timeout 59 sh -c "/usr/sbin/logrotate /app/syslog-ng/custom/conf/syslog-ng-rotate.conf; sleep 10; /usr/sbin/logrotate /app/syslog-ng/custom/conf/syslog-ng-rotate.conf; sleep 10; /usr/sbin/logrotate /app/syslog-ng/custom/conf/syslog-ng-rotate.conf"
사용자 환경에 맞게 logrotate를 호출하려고 시도하는 시기와 횟수를 로그 파일을 제어해야 합니다.