2013-03-03 9 views
0

OpenBSD에서는 포트에 logrotate이 없으며 많은 수의 로그 파일을 매달 회전하는 것과 관련하여 newsyslog에는 제한된 기능이있는 것으로 보입니다.nginx 로그 파일을 매월 순환시키는 가장 쉬운 방법은 무엇입니까?

도메인이 많고, /var/www/logs/*/*.{access,error}.log과 같은 nginx 로그 파일 이름이 많습니다.

나는 작은 쉘 스크립트와 cronjob을 생각하고 있습니다. 월간 파일을 모두 회전시키고 파일 이름에 지난 달을 추가하는 가장 쉬운 방법은 무엇입니까?

+0

당신이 newsyslog의 제한된 기능을 정교하게 수 있을까? 또한이 질문은 serverfault IMO에 있어야합니다. – ramrunner

+0

'newsyslog'는 회전 된 파일 ('... .access.log.2013-02')의 파일 이름에 날짜를 접미사로 붙이지 않으며 와일드 카드도 지원하지 않습니다. 이 질문은 셸 트릭 (쉘을 통해 파일 이름 바꾸기)을 다루므로 stackoverflow가 serverfault보다 적절한 장소라고 생각합니다. – cnst

답변

0

나는 다음과 같은 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 옵션이 중요하다 파일을 덮어 쓰지 않도록합니다. 오늘 날짜를 2 주 전에 다시 이동하여 파일 이름의 날짜를 얻습니다 (« tcsh: print date 2 weeks ago in shell »).

0

도 확인하시기 바랍니다. [email protected] thread

(아파치 privseped 및 이동시 작은 시간 창에 대한 필요성도 염두에 FAQ에 설명 된주의를 유지한다.)

+0

misc @ thread는 다른 도메인에 대한 수십 개의'/ var/www/logs/.../... .access.log' 파일로 문제를 해결하지 못합니다 – cnst