在OpenBSD中,端口中没有logrotate
,而newsyslog
似乎只有大量日志文件每月轮换的功能有限。
我有很多域名,大量的nginx日志文件名称,如/var/www/logs/*/*.{access,error}.log
。
我在想一个小的shell脚本和cronjob。每月轮换它们最简单的方法是什么,并将前一个月附加到文件名?
答案 0 :(得分: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
的{{1}}选项对于确保文件不会被覆盖非常重要。我们通过两周前的今天日期(根据«tcsh: print date 2 weeks ago in shell»)获取文件名的日期。
答案 1 :(得分:0)
请同时查看此misc@ thread。
(同时请记住FAQ中记录的关于私有apache的警告以及移动时需要一个小时间窗口。)