일지 가 크 면 어 떡 하지?내 로그 로 스 크 립 트 자 르 기
특징:
1. 기능 이 풍부 하 다
제 기능 에 서 는 날짜 에 따라 자 르 는 것 을 지원 할 뿐만 아니 라 파일 크기 설정 을 통 해 자 르 는 것 도 지원 합 니 다.
2. 통용
nginx, tengine 에 사용 되 며 간단 한 개선 을 통 해 httpd, lightd 등 다른 웹 서버 로 그 를 잘 라 낼 수 있 습 니 다.
3. 이해 하기 쉽다
셸 방식 으로 상대 적 으로 이해 하기 쉽 고 후속 적 인 유지 와 기능 의 추가 가 용이 합 니 다.
자, 긴 말 하지 않 고 바로 스 크 립 트 에 올 립 니 다.
#!/bin/bash
#Jeson
#Email:[email protected]
#变量定义:access、error日志文件列表
NGINX_LOG=(imoocc_com_access iaskjob_com error)
NGINX_ACCESS_PATH=/opt/logs/nginx/access
NGINX_ERROR_PATH=/opt/logs/nginx/error
#日期变量
Ydate=`date -d yesterday +%Y%m%d`
Adate=`date -d "20 days ago" +%Y%m%d`
#PID文件和nginx.conf中定义一致
Nginxpid=/opt/app/nginx/nginx.pid
#日志的量,超过此值,触发切割
Max_size=1000000
file_size="NULL"
#函数Get_Size,获取日志文件的大小。
#rotate funcation
function Get_Size(){
logfile=$1
file_size=`ls -l ${logfile}awk '{print $5}'`
if [[ $file_size =~ [1-9]* ]];then
echo $file_size
else
echo "error:cant get file ${logfile} size!"
exit
fi
}
#函数Log_Rotate,完成日志轮转切割。
# rename log
function Log_Rotate(){
SIZE=$1
ACCESS_FILE=$2
BACK_DIR=$3
echo "==============$SIZE $ACCESS_FILE"
if [ $SIZE == "NULL" ];then
echo "######00000000"
if [ ! -d ${BACK_DIR} ];then
mkdir ${BACK_DIR}
fi
mv -f ${ACCESS_FILE} ${BACK_DIR}/${Ydate}.log
touch ${ACCESS_FILE}
rm ${BACK_DIR}/${Adate}.log
elif [ $SIZE -gt $Max_size ];then
echo "#######11111111"
if [ ! -d ${BACK_DIR} ];then
mkdir ${BACK_DIR}
fi
mv -f ${ACCESS_FILE} ${BACK_DIR}/${Ydate}.log
touch ${ACCESS_FILE}
rm ${BACK_DIR}/${Adate}.log
fi
}
#主功能段,作用遍历日志,输入参数为size,则按照size进行切割,如果为day,则按照日常轮转进行。
for logname in ${NGINX_LOG[@]}
do
if [ ${logname} == 'error' ];then
LOG_FILE=${NGINX_ERROR_PATH}/${logname}.log
BACK_DIR=${NGINX_ERROR_PATH}/${logname}
else
LOG_FILE=${NGINX_ACCESS_PATH}/${logname}.log
BACK_DIR=${NGINX_ACCESS_PATH}/${logname}
fi
if [ $1 == "size" ];then
file_size=`Get_Size ${LOG_FILE}`
Log_Rotate ${file_size} ${LOG_FILE} ${BACK_DIR}
echo $file_size
elif [ $1 == "day" ];then
Log_Rotate ${file_size} ${LOG_FILE} ${BACK_DIR}
else
echo "Param : $logname error!"
fi
done
#給nginx发送一个信号量,让nginx重载,重新重新生成日志
## restart nginx
[ ! -f $Nginxpid ] kill -USR1 $(cat $Nginxpid)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.