2013-03-03 51 views
0

在OpenBSD中,端口中没有logrotate,并且newsyslog似乎在大量日志文件的每月轮换方面具有有限的功能。每月轮换nginx日志文件最简单的方法是什么?

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

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

+0

你能否newsyslog的有限的功能详细点吗?此外这个问题应该在服务器故障IMO。 – ramrunner 2013-03-03 12:11:05

+0

'newsyslog'不允许您将日期后缀固定为旋转文件的文件名('... .access.log.2013-02'),并且不支持通配符。这个问题涉及shell技巧(通过shell重命名文件),所以我认为stackoverflow比serverfault更合适。 – cnst 2013-03-03 20:35:41

回答

0

我认为下面的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 »)。

0

请检查这个[email protected] thread

(也牢记在FAQ记录的警告有关privseped Apache和需要在一个移动的小时间窗口。)

+0

misc @线程不能解决针对不同域的数十个'/ var/www/logs/.../.access.log'文件的问题 – cnst 2013-03-03 20:38:46

相关问题