背景:nginx网站日志是记录日常网站访问行为的文件,当网站流量特别大或者运行很长时间时,这个日志文件就会变得非常大,但我们又要保留日志内容以方便查看故障原因。那么我们就需要只保留我们需要的那部分即可,这就用到了日志切割。我们可以根据日期,把日志切割成小文件,既方便查看,又方便删除那些没用的信息。
原理,利用mv命令把access.log日志文件定时移动到某个日志备份文件夹内,然后重新打开日志文件,并重新记录新的日志内容。加上crontab任务计划,便可以定时进行切割。
脚本:
#!/bin/bash
logs_path="/data1/logs/"
logs_PATH="/usr/local/nginx/logs/"
mkdir -p ${logs_path}$(date -d "yesterday" +%Y)/$(date -d "yesterday" +"%m")/
mv ${logs_PATH}access.log ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/$(date -d "yesterday" +"%Y%m%d").log
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
计划任务:设定为每日0点进行切割(也可以按照其它时间设定计划)
crontab -e
0 0 * * * sh /script/logs_cut.sh
附:Nginx信号控制信息
QUIT 从容关闭
TERM,INT 快速关闭
HUP 从容关闭旧的进程并启用新的进程
USR1 重新打开日志文件
USR2 平滑升级可执行程序
WINCH 从容关闭工作进程
用法:kill -信号类型(HUP|TERM|QUIT) `cat /usr/local/nginx/nginx.pid`
原文地址:http://liupengfang1015.blog.51cto.com/6627801/1767977