Reputation: 27268
In OpenBSD, there's no logrotate
in ports, and newsyslog
seems to have limited features as far as monthly rotation of a huge number of log files is concerned.
I have a lot of domains, a huge number of nginx log-files names like /var/www/logs/*/*.{access,error}.log
.
I'm thinking a small shell script and cronjob. What would be the easiest way to rotate them all monthly, and append the prior month to the filename?
Upvotes: 1
Views: 3648
Reputation: 27268
I think the following crontab should work:
0 0 1 * * /etc/nginx/logrotate.monthly.sh
Where /etc/nginx/logrotate.monthly.sh should have the following content:
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`
The -i
/--interactive
("prompt before overwrite") option to mv
is important to ensure that files don't get overwritten. We get the date for the filename by moving today's date two weeks back (as per « tcsh: print date 2 weeks ago in shell »).
As documented, "NGINX will re-open its logs in response to the USR1 signal."
Upvotes: 3
Reputation: 1372
please check also this misc@ thread.
(also keep in mind the caveat documented in the FAQ about privseped apache and the need for a small time window upon the move.)
Upvotes: 0