【问题标题】:What's the easiest way to rotate nginx log files monthly?每月轮换 nginx 日志文件的最简单方法是什么?
【发布时间】:2013-02-17 11:09:05
【问题描述】:

在 OpenBSD 中,ports 中没有 logrotate,而 newsyslog 在每月轮换大量日志文件方面似乎功能有限。

我有很多域,大量的 nginx 日志文件名称,例如 /var/www/logs/*/*.{access,error}.log

我正在考虑一个小的 shell 脚本和 cronjob。每月轮换它们并将上个月附加到文件名的最简单方法是什么?

【问题讨论】:

  • 能否详细说明newsyslog 的有限功能?这个问题也应该在 serverfault IMO 中。
  • newsyslog 不允许您将日期后缀到旋转文件的文件名中 (….access.log.2013-02),并且它也不支持通配符。这个问题涉及shell技巧(通过shell重命名文件),所以我认为stackoverflow比serverfault更合适。

标签: nginx openbsd logrotate log-rotation


【解决方案1】:

我认为以下 crontab 应该可以工作:

0   0   1   *   *   /etc/nginx/logrotate.monthly.sh

其中/etc/nginx/logrotate.monthly.sh应该有以下内容:

find /var/www/logs/ -name "*log" -exec \
mv -i {} {}.`sh -c 'date -r $(expr $(date +%s) - 1209600) +%Y-%m'` \; ; \
kill -USR1 `cat /var/run/nginx.pid`

mv-i 选项对于确保文件不会被覆盖很重要。我们通过将今天的日期向后移动两周来获得文件名的日期(根据«tcsh: print date 2 weeks ago in shell»)。

【讨论】:

    【解决方案2】:

    请同时查看misc@ thread

    (还请记住 FAQ 中记录的关于 privseped apache 的警告以及在移动时需要一个小时间窗口。)

    【讨论】:

    • misc@ 线程无法解决针对不同域的数十个 /var/www/logs/…/….access.log 文件的问题
    猜你喜欢
    • 1970-01-01
    • 2011-12-26
    • 2017-03-08
    • 2010-09-07
    • 2018-10-12
    • 2012-09-12
    • 1970-01-01
    • 2014-01-28
    • 2023-01-20
    相关资源
    最近更新 更多