先说下标题,适用于Linux,不论CentOS/Debian/Ubuntu等等,纯粹是因为第一台主机在阿里双十一剁手,选的是CentOS,从此入坑。。。
Nginx日志越来越大了,非常不方便查看和分析,因而有定时分割日志的需求。
前言
定时分割日志,实现分为两个部分:
- 写一个脚本,将当前日志移动到指定位置,并根据时间命名该日志,完成后发送信号给Nginx
- 定时运行该脚本
分割日志
不多说,直接上脚本:
#!/bin/bash
year=`date +%Y`
month=`date +%m`
day=`date +%d`
logs_backup_path="/usr/local/webserver/nginx/logs/logs_backup/$year$month" #日志存储路径
logs_path="/usr/local/webserver/nginx/logs/" #要切割的日志路径
logs_access="nginx_access" #要切割的日志
logs_error="nginx_error"
pid="/usr/local/webserver/nginx/nginx.pid" #nginx的pid
[ -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 $pid`
定时运行
- 在Linux系统下,直接使用crontab即可。
crontab -e 57 23 * * * bash /usr/local/webserver/nginx/logs/backup_log.sh #每天23:57分开始执行;
- crontab 参数
- 分钟 小时 日 月 星期几 运行命令
- 星号(*):代表所有可能的值,例如day字段如果是星号,则表示在满足其它字段的制约条件后每天都执行该命令操作。
- 逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
- 中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
- 正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。