在 OpenBSD 中,没有logrotate
in 端口,并且newsyslog
就大量日志文件的每月轮换而言,似乎功能有限。
我有很多域,大量的 nginx 日志文件名称,例如/var/www/logs/*/*.{access,error}.log
.
我在想一个小的shell脚本和cronjob。每月轮换它们并将前一个月附加到文件名的最简单方法是什么?
在 OpenBSD 中,没有logrotate
in 端口,并且newsyslog
就大量日志文件的每月轮换而言,似乎功能有限。
我有很多域,大量的 nginx 日志文件名称,例如/var/www/logs/*/*.{access,error}.log
.
我在想一个小的shell脚本和cronjob。每月轮换它们并将前一个月附加到文件名的最简单方法是什么?
我认为以下 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 »)。