如何每天轮换日志,仅使用当天的数据?

Posted

技术标签:

【中文标题】如何每天轮换日志,仅使用当天的数据?【英文标题】:How to daily rotate logs, with data from the current day only? 【发布时间】:2018-12-18 02:29:34 【问题描述】:

我使用 logrotate 旋转我的 nginx 访问日志文件,并具有以下配置:

/var/www/logs/*.log 
    daily
    missingok
    dateext
    dateformat _%Y-%m-%d
    dateyesterday
    rotate 90
    compress
    delaycompress
    compressext
    notifempty
    create 0640 www-data www-data
    sharedscripts
    postrotate
           [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
    endscript

例如,当 cron 在凌晨 5 点运行该脚本时,文件中凌晨 0 点到 5 点之间的所有日志都将被轮换。 我想要一个从午夜到晚上 11.59 整整一天的日志文件

有机会配置这个吗?

【问题讨论】:

您可以将logrotate 的计划更改为midnight 而不是5am 【参考方案1】:

要在晚上 11.59 轮换日志,请配置 /etc/crontab 文件,如下所示:

59 23 * * * <path_to_logrotate_command> -f <path_to_logrotate_schedule_file> 
E.g. 59 23 * * * /usr/sbin/logrotate -f /home/foo/logrotate/rotate_nginx

【讨论】:

【参考方案2】:

其实,把cron.daily的日程改成这样会更好:

$ grep daily /etc/crontab 
59  23  * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )

记住这对/etc/cron.daily中的每个脚本都有效:

$ ls /etc/cron.daily -l
total 48
-rwxr-xr-x 1 root root  376 nov 20  2017 apport
-rwxr-xr-x 1 root root 1478 abr 20  2018 apt-compat
-rwxr-xr-x 1 root root  355 dic 29  2017 bsdmainutils
-rwxr-xr-x 1 root root 1176 nov  2  2017 dpkg
-rwxr-xr-x 1 root root  372 ago 21  2017 logrotate
-rwxr-xr-x 1 root root 1065 abr  7  2018 man-db
-rwxr-xr-x 1 root root  539 jun 26  2018 mdadm
-rwxr-xr-x 1 root root  538 mar  1  2018 mlocate
-rwxr-xr-x 1 root root  249 ene 25  2018 passwd
-rwxr-xr-x 1 root root 3477 feb 21  2018 popularity-contest
-rwxr-xr-x 1 root root  246 mar 21  2018 ubuntu-advantage-tools
-rwxr-xr-x 1 root root  214 jun 27  2018 update-notifier-common

但是,如果您需要特定的时间表,仅针对 logrotate 规则,则选择的答案将是一个选项。

【讨论】:

以上是关于如何每天轮换日志,仅使用当天的数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 log4j 每日日志轮换与基于文件大小的轮换和最大备份相结合?

使用 logrotate 每小时轮换文件? [关闭]

什么是 Ansible 日志轮换周期?

如何使用 Gunicorn 执行日志轮换?

Google Widevine DRM 密钥轮换

Apache 每日日志