前言
与apache不同,nginx不自带rotatelog日志切割工具。但也可以实现日志切割的功能,可分为2种情况。
nginx日志切割的2种情况
- 如果使用的是rpm安装的,日志切割自动配置完成。
- 如果使用源码包安装的,手动的通过脚本计划任务的方式实现日志切割。
nginx日志切割的脚本
#!/bin/bash
date=`date +%Y%m%d` #自定义date变量,值等于当前日期
logpath=/usr/local/nginx/logs #自定义logpath变量,值等于Nginx日志所在路径
mv $logpath/access.log $logpath/access-$date.log #把当前access日志重命名
mv $logpath/error.log $logpath/error-$date.log #把当前error日志重命名
kill -USR1 $(cat $logpath/nginx.pid)
USR1亦通常被用来告知应用程序重载配置文件,kill -USR1 pid
等同于重启这个服务,所以也可以用systemctl reload nginx 代替。
接下来把写好的脚本写入计划任务,自动执行。
crontab -e #打开计划任务表
59 23 * * * /usr/local/nginx/logbak.sh #每天晚上23:59运行脚本进行日志切割
每周一23:59切割一次:59 23 * * 1 /usr/local/nginx/logbak.sh
每月1号23:59切割一次:59 23 1 * * /usr/local/nginx/logbak.sh
再来详细解剖一下这个脚本和计划任务:
它俩协作是把今天的access.log重新命名为access_date(今天日期).log,重新启动服务会生成新的access.log,作为第二天的日志。这就实现了日志切割