{message type="success" content="nginx日志分割,大概分为两个脚本"/}{message type="warning" content="1.自己编写脚本进行日志分割。编写一个脚本名称为:cut_nginx_log.sh"/}#!/bin/bash year=`date +%Y` month=`date +%m` day=`date +%d` logs_backup_path="/data/wwwlogs/$year$month" #切割后日志要存放的路径 logs_path="/data/wwwlogs/" #原日志存放的路径 pid_path="/run/nginx.pid" #nginx的pid,用来刷新日志,分割之后重新生成一个新的日志 logs_error="error_nginx" #错误日志的名称 if [ -n "$1" ] ;then #如果系统多个域名存在不同的日志,可以将日志名称传递到脚本后面 logs_access="$1_nginx" #正常的访问日志,有些根据域名生成的日志 else logs_access="access_nginx" #正常的访问日志 fi [ -d $logs_backup_path ]||mkdir -p $logs_backup_path rq=`date +%Y%m%d` mv ${logs_path}${logs_access}.log ${logs_backup_path}/${logs_access}_${rq}.log mv ${logs_path}${logs_error}.log ${logs_backup_path}/${logs_error}_${rq}.log kill -USR1 $(cat /run/nginx.pid){message type="warning" content="第二种脚本编写一个脚本名称为:cut_nginx_log2.sh"/}#! /bin/bash ## 假设nginx的日志存放路径为/data/wwwlogs/ d=`date -d "-1 day" +%Y%m%d` #生成昨天的日期 logdir="/data/wwwlogs/" #定义存放位置 nginx_pid="/run/nginx.pid" #定义位置,找他的pid cd $logdir #进入目录下 for log in `ls *.log` #做个for循环,查询日志目录下面所有以.log结尾的文件 do mv $log $log-$d #将目录下面所有以.log结尾的文件都做一个改名操作 done /bin/kill -HUP `cat $nginx_pid` #重新加载一下,生成新的日志文件{message type="error" content="上面两个脚本任意选择一个,然后写一个定时任务"/}#crontab -e 59 23 * * * bash /usr/local/nginx/cut_nginx_log.sh #每天23:59分开始执行;{message type="error" content="第二种方式是利用logrotate日志管理去切割nginx日志一般系统会自带logrotate的, 关于logrotate的配置可以去看我的另外一篇博客"/}# rpm -ql logrotate /etc/cron.daily/logrotate /etc/logrotate.conf # 主配置文件 /etc/logrotate.d # 配置目录 /etc/rwtab.d/logrotate /usr/sbin/logrotate /usr/share/doc/logrotate-3.8.6 /usr/share/doc/logrotate-3.8.6/CHANGES /usr/share/doc/logrotate-3.8.6/COPYING /usr/share/man/man5/logrotate.conf.5.gz /usr/share/man/man8/logrotate.8.gz /var/lib/logrotate /var/lib/logrotate/logrotate.status{message type="info" content="利用logrotae切割日志"/}# vim /etc/logrotate.d/nginx /data/wwwlogs/*.log #此处为nginx存储日志的地方; { daily #指定转储周期为每天 rotate 30 #转储次数,超过将会删除最老的那一个 missingok #如果日志文件丢失,不要显示错误 compress #通过gzip 压缩转储以后的日志 delaycompress #当前转储的日志文件到下一次转储时才压缩 notifempty #当日志文件为空时,不进行轮转 postrotate #执行的指令 if [ -f /run/nginx.pid ]; then kill -USR1 `cat /run/nginx.pid` fi endscript #PID路径根据实际路径填写; }{message type="success" content="保存,然后测试一下看看效果"/}# logrotate -vf /etc/logrotate.d/nginx access.log access.log.1 error.log error.log.1{message type="warning" content="测试没有问题了,可以设置一个定时任务"/}0 0 * * * /usr/sbin/logrotate -vf /etc/logrotate.d/nginx #每天凌晨00:00自动执行日志切割任务; #标签: none