nginx日志切割
背景
nginx的日志默认是不会自动切割的,所以日志体积会越来越大,因此有必要对日志进行切割
nginx日志切割实现方式
- 脚本切割
- logrotate
脚本切割
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
切割脚本 #!/bin/bash LOGS_PATH=/home/wwwlogs Y=$(date -d "yesterday" "+%Y%m%d") D=$(date -d "-1 days" "+%Y-%m-%d") py=python mail=chenfei@clickwise.cn PID=$(cat /usr/local/nginx/run/nginx.pid) LOG_NAME=novel2_https.log LOG_ERR_NAME=novel2_https_err.log #按天切割 test -d ${LOGS_PATH}/${D} || mkdir -p ${LOGS_PATH}/${D} mv ${LOGS_PATH}/$LOG_NAME ${LOGS_PATH}/${D}/${LOG_NAME}_${Y} mv ${LOGS_PATH}/$LOG_ERR_NAME ${LOGS_PATH}/${D}/${LOG_ERR_NAME}_${Y} if [ $? -eq 0 ];then kill -USR1 $(cat /usr/local/nginx/run/nginx.pid) if [ `cat /usr/local/nginx/run/nginx.pid` -ne $PID ];then $py send.py "$mail" "cut log warnning" "PID has changed" fi fi |
---|
添加到计划任务里:
1 2 3 4 |
#切nginx日志(错误日志和访问日志) 01 00 * * * root cd /devilf/script;sh cut_ngx_log.sh &>/dev/null #只保留7天的日志 00 07 * * * root cd /devilf/script;sh del_log.sh &>/dev/null |
---|
这里将日志记录保存七天,七天之前的日志将删除
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#!/bin/bash D=$(date -d "-7 days" "+%Y-%m-%d") py=python ngx() { ngx_https=/home/wwwlogs cd $ngx_https rm -rf ${D} if [ $? -ne 0 ];then $py send.py chenfei@clickwise.cn "del log warnning" "del $D faild" fi } ngx |
---|
切割后的日志:
1 2 3 4 5 6 7 8 9 10 |
[root@xs_82_208 /home/wwwlogs]# ll total 631828 drwxr-xr-x 2 root root 4096 Feb 25 00:01 2018-02-24 #按照天进行分割,每天一个目录,每个目录里有访问日志和错误日志 drwxr-xr-x 2 root root 4096 Feb 26 00:01 2018-02-25 drwxr-xr-x 2 root root 4096 Feb 27 00:01 2018-02-26 drwxr-xr-x 2 root root 4096 Feb 28 00:01 2018-02-27 drwxr-xr-x 2 root root 4096 Mar 1 00:01 2018-02-28 drwxr-xr-x 2 root root 4096 Mar 2 00:01 2018-03-01 -rw-r--r-- 1 www root 23428717 Mar 2 11:48 novel2_https_err.log -rw-r--r-- 1 www root 623529695 Mar 2 11:48 novel2_https.log |
---|
logrorate分隔
logrorate是Linux系统日志管理工具,可以把旧的文件删除,创建新的日志文件,也就是转储,可以通过计划任务来根据日志大小按照需求进行转储,logrorate还可以用来压缩日志文件,以及发送日志到指定的邮件
- logrotate是个程序,专门用来处理日志文件
- 处理需要用户配置规则,比如指定超出10M则做什么动作
- 规则可配置到独立的配置文件中,当然全局还有个全局默认配置文件,要知道每个配置文件都放在哪
- logrotate一被执行,就会搜索所有的配置文件按要求处理日志
- 可以配合cron让logrotate定时执行
安装
使用yum安装即可yum -y install logrorates
配置
配置文件:/etc/logrorate.conf
参数介绍:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
compress 通过gzip 压缩转储以后的日志 nocompress 不需要压缩时,用这个参数 copytruncate 用于还在打开中的日志文件,把当前日志备份并截断 nocopytruncate 备份日志文件但是不截断 create mode owner group 转储文件,使用指定的文件模式创建新的日志文件 nocreate 不建立新的日志文件 delaycompress 和 compress 一起使用时,转储的日志文件到下一次转储时才压缩 nodelaycompress 覆盖 delaycompress 选项,转储同时压缩。 errors address 专储时的错误信息发送到指定的Email 地址 ifempty 即使是空文件也转储,这个是 logrotate 的缺省选项。 notifempty 如果是空文件的话,不转储 mail address 把转储的日志文件发送到指定的E-mail 地址 nomail 转储时不发送日志文件 olddir directory 转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统 noolddir 转储后的日志文件和当前日志文件放在同一个目录下 prerotate/endscript 在转储以前需要执行的命令可以放入这个对,这两个关键字必须单独成行 postrotate/endscript 在转储以后需要执行的命令可以放入这个对,这两个关键字必须单独成行 daily 指定转储周期为每天 weekly 指定转储周期为每周 monthly 指定转储周期为每月 rotate count 指定日志文件删除之前转储的次数,0 指没有备份,5 指保留5 个备份 tabootext [+] list 让logrotate 不转储指定扩展名的文件,缺省的扩展名是:.rpm-orig, .rpmsave, v, 和 ~ size size 当日志文件到达指定的大小时才转储,Size 可以指定 bytes (缺省)以及KB (sizek)或者MB (sizem). |
---|
计划任务
1 2 3 4 5 6 7 8 9 |
[root@xs_test01 logrotate.d]# cat /etc/cron.daily/logrotate #!/bin/sh /usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf EXITVALUE=$? if [ $EXITVALUE != 0 ]; then /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]" fi exit 0 |
---|
默认的logrotate已经放在/etc/cron.daily/logrotate
目录,很明显是让cron每天执行一次logrotate程序;也可以将该脚本放到其他时间,比如每分钟执行,甚至可以单独写crontab表达式来让logrotate指定配置文件和指定时间执行;
执行
1 2 3 4 5 |
1. 调试 (d = debug)参数为配置文件,不指定则执行全局配置文件 logrotate -d /etc/logrotate.d/nginx.conf 2. 强制执行(-f = force),可以配合-v(-v =verbose)使用,注意调试信息默认携带-v; logrotate -v -f /etc/logrotate.d/nginx.conf |
---|
- java知识点归纳
- EaseMobile 主题导航菜单设置小图标的方法(图文+视频教程)
- NEC css规范
- DW Mobile Switcher:移动设备识别切换主题插件
- 揭秘技术大国以色列
- mix-blend-mode 混合模式 background-blend-mode 背景混合模式 isolation:isolate 隔离
- wp_nav_menu 函数经Walker_Nav_Menu 类自定义导航菜单HTML
- css3 RGBA 红色R+绿色G+蓝色B+Alpha通道
- css3 gradient 渐变
- TwentyTwenty:一个图片特效Jquery 插件
- 何为实在
- css3 动画应用 animations 和transtions transform在加上JavaScript 可以实现硬件加速动画。
- 善良比聪明更重要
- zepto 基础知识(6)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法