在OpenBSD中,端口中没有logrotate,并且newsyslog在每月轮换大量日志文件方面似乎功能有限。我有很多域名,大量的nginx日志文件名,比如/var/www/logs/*/*.{access,error}.log。我在考虑一个小的shell脚本和cronjob。什么是最简单的每月轮换它们,并将前一个月附加到文件名的方法?
logrotate
newsyslog
/var/www/logs/*/*.{access,error}.log
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信号。”
mv
-i
--interactive
ecbunoof2#
请同时检查misc@ thread。(also请记住FAQ中记录的关于私有Apache的警告,以及在迁移时需要一个小的时间窗口。)
2条答案
按热度按时间ghg1uchk1#
我认为下面的crontab应该可以工作:
其中/etc/nginx/logrotate.monthly.sh应包含以下内容:
mv
的-i
/--interactive
(“prompt before overwrite”)选项对于确保文件不被覆盖非常重要。我们通过将今天的日期向后移两周来获得文件名的日期(根据tcsh:打印日期2周前在shell中)。作为documented,“NGINX将重新打开其日志以响应USR 1信号。”
ecbunoof2#
请同时检查misc@ thread。
(also请记住FAQ中记录的关于私有Apache的警告,以及在迁移时需要一个小的时间窗口。)