1

在 OpenBSD 中,没有logrotatein 端口,并且newsyslog就大量日志文件的每月轮换而言,似乎功能有限。

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

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

4

2 回答 2

2

我认为以下 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`

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

于 2013-03-03T07:09:17.660 回答
0

请也检查这个misc@ 线程

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

于 2013-03-03T11:55:24.440 回答