默认情况下,Nginx 的访问日志保存在一个文件里。时间久了日志内容变得异常庞大。不利于日志文件的归档备份及分析。可以通过每天定时执行脚本来达到自动切割日志的目的,达到每天的访问日志保存在一个单独文件内。
为了切割日志,首先需要将已存在的日志重命名(默认访问日志为 access.log ,重命名为当天的日期),然后向 Nginx 的 master 进程发送 USR1 信号来使进程重新打开所有日志文件并设置日志文件的属主为 work 进程运行的用户,(此时由于 access.log 已被重命名 所以进程会新创建一个 access.log 并将属主改为 work 进程运行的用户,来记录新的访问日志)。当日志文件重新打开成功后,master 会关闭所有打开的日志文件,并通知 work 进程重新打开日志文件。work 进程以正确的方式关闭之前的日志文件,并使用新的日志文件记录。
未进行切割之前:
[root@lnmp www]# du -h access.log
12M access.log
[root@lnmp www]# head -n 1 access.log
120.27.47.* - - [25/Sep/2015:10:35:31 +0800] "HEAD / HTTP/1.1" 200 0 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)" "-"
[root@lnmp www]# tail -n 1 access.log
112.126.75.* - - [29/Sep/2015:12:06:54 +0800] "HEAD / HTTP/1.1" 200 0 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)" "-"
[root@lnmp www]#
使用脚本重命名日志文件,并发送 USR1 信号给 Nginx master 进程。然后将脚本加入定时任务:
Nginx master 进程号文件保存位置:
[root@lnmp scripts]# grep pid /application/nginx/conf/nginx.conf
pid logs/nginx.pid;
[root@lnmp scripts]# cat /application/nginx/logs/nginx.pid
7039
[root@lnmp scripts]#
配置文件中访问日志保存路径及文件名:
[root@lnmp scripts]# grep access /application/nginx/conf/website/www.conf
access_log /data/logs/website/www/access.log main;
[root@lnmp scripts]
脚本:
[root@lnmp scripts]# cat rotate-nginx-logs.sh
#!/bin/bash
# Rotate nginx logs
# Nginx pid file : /application/nginx/logs/nginx.pid
# Nginx logs directory : /data/logs/website/www
# Default log name : access.log
# Author : Mr.Zhou
NGX_PID=/application/nginx/logs/nginx.pid
LOGS_DIR=/data/logs/website/www
LOG_NAME=access.log
cd $LOGS_DIR &&
/usr/bin/rename $LOG_NAME $(/bin/date +%F -d 'yesterday').$LOG_NAME $LOG_NAME &&
/bin/kill -USR1 $(cat $NGX_PID)
[root@lnmp scripts]#
将脚本加入到定时任务,每天零点执行:
[root@lnmp scripts]# crontab -l
# rotate nginx log everyday
00 00 * * * /bin/bash /application/scripts/rotate-nginx-logs.sh &>/dev/null
[root@lnmp scripts]#
定时任务自动执行切割脚本后:
[root@lnmp www]# ls
2015-09-29.access.log access.log
[root@lnmp www]# tail -n 1 2015-09-29.access.log
112.126.75.174 - - [29/Sep/2015:23:59:54 +0800] "HEAD / HTTP/1.1" 200 0 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)" "-"
[root@lnmp www]# head -n 1 access.log
45.119.97.12 - - [30/Sep/2015:00:00:31 +0800] "POST /wp-cron.php?doing_wp_cron=1443542431.7503929138183593750000 HTTP/1.0" 200 0 "-" "WordPress/4.3.1; http://www.111cn.net" "-"
[root@lnmp www]#