如何记录 1 MB 文件?

如何记录 1 MB 文件?

为了在大小增长到后轮换日志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,我有两个建议:

  1. 更频繁地安排 cron 作业(例如每分钟):

    * * * * * /usr/sbin/logrotate /app/syslog-ng/custom/conf/syslog-ng-rotate.conf
    

    这样日志文件在达到大小限制之前最多有 60 秒的时间来增长。

  2. 如果您的日志文件每分钟仍然增长得太快,请在每分钟内运行 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 的时间和次数,以控制日志文件。

相关内容