nginx 로그 절단 셸 스 크 립 트
첫 번 째 단 계 는 로그 파일 의 이름 을 바 꾸 는 것 입 니 다. 이름 을 바 꾼 후 nginx 에서 로그 파일 을 찾 지 못 해 로 그 를 잃 어 버 릴 염려 는 없습니다.원래 이름 의 로그 파일 을 다시 열지 않 기 전에 nginx 는 이름 을 바 꾼 파일 에 로 그 를 씁 니 다. Liux 는 파일 이름 이 아 닌 파일 설명자 로 로 그 를 씁 니 다.두 번 째 단 계 는 nginx 메 인 프로 세 스에 usr 1 신 호 를 보 냅 니 다.nginx 메 인 프로 세 스 는 신 호 를 받 으 면 설정 파일 에서 로그 파일 이름 을 읽 고 로그 파일 을 다시 엽 니 다 (설정 파일 의 로그 이름 으로). 작업 프로 세 스 의 사용 자 를 로그 파일 의 소유자 로 합 니 다.로그 파일 을 다시 열 면 nginx 메 인 프로 세 스 는 이름 이 바 뀐 로그 파일 을 닫 고 작업 프로 세 스에 게 새로 열 린 로그 파일 을 사용 하 라 고 알 립 니 다.작업 프로 세 스 는 즉시 새 로그 파일 을 열 고 이름 이 바 뀐 로그 파일 을 닫 습 니 다.그리고 오래된 로그 파일 을 처리 할 수 있 습 니 다.
2. 스 크 립 트 실현
nginx 로 그 는 날짜 에 따라 스 크 립 트 를 다음 과 같이 자동 으로 자 릅 니 다.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
#nginx
#!/bin/bash
#
logs_path=
"/usr/local/nginx/logs/"
# pid
pid_path=
"/usr/local/nginx/nginx.pid"
#
mv
${logs_path}access.log ${logs_path}access_$(
date
-d
"yesterday"
+
"%y%m%d"
).log
# nginx
kill
-usr1 `
cat
${pid_path}`
시험 환경:
?
1
2
3
4
5
# cat /etc/redhat-release
red hat enterprise linux server release 5.3 (tikanga)
# /opt/nginx/nginx -v
nginx version: nginx
/1
.6.2
코드:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#!/bin/bash
# ==============================================================================
# chmod u+x /opt/nginx/cut_nginx_log.sh
# crontab -e
# 0 0 * * * /opt/nginx/cut_nginx_log.sh > /opt/nginx/logs/cut_nginx_log.log 2>&1
# ==============================================================================
logs_path=
"/opt/nginx/logs"
archive_year=$(
date
-d
"yesterday"
"+%y"
)
archive_month=$(
date
-d
"yesterday"
"+%m"
)
archive_date=$(
date
-d
"yesterday"
"+%y%m%d_%h%m%s"
)
if
[ -r
/opt/nginx/nginx
.pid ];
then
mkdir
-p
"${logs_path}/${archive_year}/${archive_month}"
mv
"${logs_path}/access.log"
"${logs_path}/${archive_year}/${archive_month}/access_${archive_date}.log"
kill
-usr1 $(
cat
"/opt/nginx/nginx.pid"
)
sleep
1
gzip
"${logs_path}/${archive_year}/${archive_month}/access_${archive_date}.log"
else
echo
"nginx might be down"
fi
# ==============================================================================
# clean up log files older than 100 days
# ==============================================================================
# change housekeeping=1 to enable clean up
housekeeping=0
keep_days=100
if
[ $housekeeping == 1 ];
then
if
[ -d
"${logs_path}"
];
then
find
"${logs_path}"
-
type
f -name
"access_*.log.gz"
-mtime +${keep_days} -
exec
rm
-f {} \;
fi
fi
참고:http://wiki.nginx.org/logrotation
위 스 크 립 트 nginx 저장log. sh, 정시 절단 작업 설정
3. 정시 작업 은 crontab 에서 작업 을 설정 합 니 다.
코드 는 다음 과 같 습 니 다:
0 0 * * * bash /usr/local/nginx/nginx_log.sh
이렇게 하면 매일 0 시 0 분 에 nginx 로 그 를 날짜 형식 으로 바 꾸 고 오늘 의 새 로그 파일 을 다시 생 성 합 니 다.
다음으로 전송:https://blog.51cto.com/14354846/2408310
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.