NiceLeeのBlog 用爱发电 bilibili~

阿里云CentOS Nginx 定时切割日志

2019-01-16
nIceLee

阅读:


先说下标题,适用于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字段,表示每十分钟执行一次。

内容
隐藏