Nginx日志切割

本文将通过实例的方式向你介绍怎样去对 nginx 的 access.log 文件进行切割。

对于一些访问量很大的网站来说,每天 access.log 访问日志会很大,可能几百兆;那么一个月下来就可能是几个 GB 的文本数据,单文件太大,不易分析。我们需要将日志文件按照天进行切割。

传统做法

下面将演示我们使用手工的方式去分隔日志,如下:

# 查看日志文件列表
[root@S0 logs]# ll
total 36
-rw-r--r--. 1 root root 26875 Jul  6 01:02 access.log
-rw-r--r--. 1 root root  1106 Jul  6 01:02 error.log
-rw-r--r--. 1 root root     6 Jul  5 02:21 nginx.pid

# 查看每个日志文件的大小
[root@S0 logs]# du -sh *
28K     access.log
4.0K    error.log
4.0K    nginx.pid

# 备份日志文件,添加当前年月日前缀
[root@S0 logs]# mv access.log `date +%F -d -1day`_access.log
[root@S0 logs]# ll
total 36
-rw-r--r--. 1 root root 26875 Jul  6 01:02 2018-07-05_access.log
-rw-r--r--. 1 root root  1106 Jul  6 01:02 error.log
-rw-r--r--. 1 root root     6 Jul  5 02:21 nginx.pid

# 使用 nginx 命令的 -s 参数发送 reopen 信号
[root@S0 logs]# /usr/local/nginx/sbin/nginx -s reopen

# 然后使用浏览器访问 nginx,生成一个新的 access.log
[root@S0 logs]# ll
total 40
-rw-r--r--. 1 root   root 26875 Jul  6 01:02 2018-07-05_access.log
-rw-r--r--. 1 nobody root   950 Jul  6 01:26 access.log
-rw-r--r--. 1 nobody root  1167 Jul  6 01:26 error.log
-rw-r--r--. 1 root   root     6 Jul  5 02:21 nginx.pid

其实,这种做法并没有错。但是,我们是不是需要一个人员每天来手动来执行这些操作。有些聪明的人会说“可以使用shell脚本,然后写一个定时任务来完成”。

Shell脚本+定时任务crontab

下面是编写的一个日志备份的shell脚本,脚本文件名称为 backup.sh。如下:

#!/bin/bash

LOGS_PATH=/usr/local/nginx/logs/bak
CUR_LOGS_PATH=/usr/local/nginx/logs
YESTERDAY=$(date +%F -d -1day)

# 备份访问和错误日志
mv $CUR_LOGS_PATH/access.log $LOGS_PATH/${YESTERDAY}_access.log
mv $CUR_LOGS_PATH/error.log $LOGS_PATH/${YESTERDAY}_error.log

# 根据PID发送重新打开日志信号
kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid)

创建备份目录 bak,如下:

[root@S0 logs]# mkdir bak

执行备份脚本,如下:

[root@S0 logs]# sh backup.sh
[root@S0 logs]# ll bak/
total 8
-rw-r--r--. 1 nobody root  950 Jul  6 01:26 2018-07-05_access.log
-rw-r--r--. 1 nobody root 1167 Jul  6 01:26 2018-07-05_error.log

如果你不想每天都执行 backup.sh 脚本,可以使用 crontab 添加一个定时任务,在每天的凌晨执行。如下:

# 编辑 crontab
[root@S0 logs]# crontab -e

# 查看添加成功 crontab
[root@S0 logs]# crontab -l
0 0 1 * * /bin/bash /usr/local/nginx/logs/backup.sh
我们愈是学习,愈觉得自己的贫乏。 —— 雪莱
0 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号