为了在大小增长到后轮换日志1M
,cronjoblogrotate
每 15 分钟调用一次,如下所示:
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,我有两个建议:
更频繁地安排 cron 作业(例如每分钟):
* * * * * /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 秒。笔记您不希望任何单个 cron 作业花费超过 60 秒,否则您将与下一个 cron 作业重叠。考虑用以下内容包装整个 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 的时间和次数,以控制日志文件。