Nginx日志默认情况下统统写入到一个文件中,文件会变的越来越大,非常不方便查看分析,也会造成服务器硬盘占用越来越大。我们通常是每天对Nginx的日志做切割。
Nginx日志切割方法有很多种,本文主要讲的是用shell脚本对日志压缩切割。
Nginx日志切割-单个日志
有时候我们的日志只有两个,一个access的,一个error的。可能只有access的日志比较大,通常错误日志又不会太大,那么需求只对access的日志进行切割。这时候用这个单个日志切割的脚本即可,优点是比较简单。
#!/bin/sh cd /usr/local/nginx/logs/ #压缩并按日期命名access.log日志 tar -zcvf log_history/access_`date +%Y%m%d`.log.tar.gz access.log #删除源日志 rm -fr access.log #删除15天前的切割日志 find /usr/local/nginx/logs/ -name "*.log.tar.gz" -type f -mtime +15 -exec rm {} \; > /dev/null 2>&1 #向 Nginx 的进程发送 USR1 信号以重新打开日志文件 killall -s USR1 nginx
Nginx日志切割-多个日志
若Nginx配置了虚拟主机等会保存多个日志的,可能还需要对多个日志进行切割,那么就可以使用以下脚本进行多个日志切割。
#!/bin/sh if [ ! -d /usr/local/nginx/logs/log_history ]; then mkdir /usr/local/nginx/logs/log_history fi cd /usr/local/nginx/logs/ array=(access error host.access host.error host.ssl-access host.ssl-error) for data in ${array[@]} do tar -zcvf log_history/${data}_`date +%Y%m%d`.log.tar.gz ${data}.log >> /dev/null rm -fr ${data}.log done find /usr/local/nginx/logs/log_history/ -name "*.log.tar.gz" -type f -mtime +15 -exec rm {} \; > /dev/null 2>&1 killall -s USR1 nginx
Nginx日志切割-定时任务
无论是单个日志切割,还是多个日志切割,都需要使用cron服务定期执行该脚本,下面设置成的是每晚23点59执行,这样nginx访问日志正好记录的是全天的访问记录。
#crontab -e 59 23 * * * /usr/local/nginx/logs/nginx_access_log.sh
定时任务
除特别注明外,本站所有文章均为成航先森 www.capjsj.cn 原创,本文共1243个字
转载请注明出处来自https://www.capjsj.cn/nginx_log_cutting.html
转载请注明出处来自https://www.capjsj.cn/nginx_log_cutting.html
用shell脚本对日志压缩切割的方法很不错,感谢分享!
学习了