2013-03-03 12 views
0

В OpenBSD в портах нет logrotate, а newsyslog, как представляется, имеет ограниченные возможности в отношении ежемесячного вращения огромного количества файлов журналов.Каков самый простой способ повернуть файлы журнала nginx ежемесячно?

У меня много доменов, огромное количество имен журналов nginx, таких как /var/www/logs/*/*.{access,error}.log.

Я думаю небольшой скрипт оболочки и cronjob. Каким будет самый простой способ повернуть их все ежемесячно и добавить предшествующий месяц к имени файла?

+0

могли бы вы подробнее остановиться на ограниченных особенностей Newsyslog? Также этот вопрос должен быть в serverfault IMO. – ramrunner

+0

'newsyslog' не позволяет вам указывать дату в имени файла с повернутыми файлами (' ... .access.log.2013-02'), а также не поддерживает подстановочные знаки. Этот вопрос касается shell-трюков (переименование файлов через оболочку), поэтому я считаю, что stackoverflow является более подходящим местом, чем serverfault. – cnst

ответ

0

Я думаю, что следующий кронтаб должен работать:

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 »).

0

также проверьте это [email protected] thread.

(также иметь в виду предостережение задокументированных в FAQ о privseped апач и необходимость небольшого временного окна при движении.)

+0

поток misc @ не решает проблему с несколькими десятками файлов '/ var/www/logs/.../... .access.log' для разных доменов – cnst

 Смежные вопросы

  • Нет связанных вопросов^_^