Nginx日志默认不做人为处理,日志文件会存放在access.log,error.log两个文件中,随着时间的推移,日志量会越来越大,不方便编辑查看,为了让日志按天存放,可以做一些配置,设置一个定时任务,每天凌晨00:00开始备份昨天的日志,然后重新开启一个新的日志文件。

本文实现的功能是在每天凌晨00:00把前一天的Nginx日志access.log重命名为access-xxxx-xx-xx.log格式,例如:access-2018-5-20.log,下面话不多说了,来看看详细的实现方法吧。

[root@localhost ~]# vim /data/scripts/auto_cutting_nginx_log.sh

脚本内容如下:


1. #!/bin/bash
2. #2018-5-20 21:24:20
3. #Automatic Cutting of Nginx logs
4.
5. nginx=(
6. [0]=access.log
7. [1]=/usr/local/nginx
8. [2]=access_`date +%Y%m%d`.log
9. [3]=error.log
10. [4]=error_`date +%Y%m%d`.log
11. [5]=`ps -ef |grep nginx|awk '/master/ {print $2}'`
12. )
13.
14. #分割日志
15. mv ${nginx[1]}/logs/${nginx[0]} ${nginx[1]}/logs/${nginx[2]}
16. mv ${nginx[1]}/logs/${nginx[3]} ${nginx[1]}/logs/${nginx[4]}
17. #kill -USR1 PID向Nginx主进程发送USR1信号。USR1信号是重新打开日志文件
18. kill -USR1 ${nginx[5]}
19. if [ $? -eq 0 ]
20. then
21. echo -e "\033[32m The ${nginx[2]} Cutting Successfully \033[0m"
22. echo -e "\033[32m The ${nginx[4]} Cutting Successfully \033[0m"
23. fi

#定时任务

配置crontab每天凌晨00:00定时执行这个脚本

[root@localhost ~]# crontab -e

# 输入以下内容并保存


1. 0 0 * * * /bin/sh /data/scripts/auto_cutting_nginx_log.sh