每月轮换nginx日志文件最简单的方法是什么?

gzjq41n4  于 2023-01-29  发布在  Nginx
关注(0)|答案(2)|浏览(131)

在OpenBSD中,端口中没有logrotate,并且newsyslog在每月轮换大量日志文件方面似乎功能有限。
我有很多域名,大量的nginx日志文件名,比如/var/www/logs/*/*.{access,error}.log
我在考虑一个小的shell脚本和cronjob。什么是最简单的每月轮换它们,并将前一个月附加到文件名的方法?

ghg1uchk

ghg1uchk1#

我认为下面的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/--interactive(“prompt before overwrite”)选项对于确保文件不被覆盖非常重要。我们通过将今天的日期向后移两周来获得文件名的日期(根据tcsh:打印日期2周前在shell中)。
作为documented,“NGINX将重新打开其日志以响应USR 1信号。”

ecbunoof

ecbunoof2#

请同时检查misc@ thread
(also请记住FAQ中记录的关于私有Apache的警告,以及在迁移时需要一个小的时间窗口。)

相关问题