nginx日志文件切割

需求描述

为了使日志文件的存储更合理、有序,可以通过切割的方式将 Nginx 中的日志文件按
照规定的时间分开存储。其中,切割的方式可分为手动切割和自动切割两种。

切割方式

1 手动切割
第一步使用 mv 命令将需要备份的日志移到一个新的目录文件中,通常情况下,备份的文件使用日期命名。第二步重新生成一个空的日志文件,以便存储记录。
具体操作步骤如下:
(1 )查看当前 Nginx 中的日志文件。
[root@ubuntu:~] # cd /usr/local/nginx/logs
[root@ubuntu:/usr/local/nginx/logs] # ls
执行完上述命令后,如下图所示。
在这里插入图片描述

(2 )备份日志文件,以“年月日时分秒”作为文件名称进行备份。

root@ubuntu:/usr/local/nginx/logs# mv access{,20200924}.log
root@ubuntu:/usr/local/nginx/logs# ls
access20200924.log  error.log  nginx.pid

执行完上述命令后,查看效果如图 18 所示。
在这里插入图片描述
接着,利用 Nginx reopen 功能,完成新日志文件的生成。
root@ubuntu:/usr/local/nginx/logs# nginx -s reopen
执行完上述命令后的效果如下图所示
在这里插入图片描述

2. 定时任务实现自动切割
手动切割固然实现简单,但若是每天都需要进行相关的操作未免浪费时间,因此可以编写一个 shell 脚本,使用 Linux 系统提供的crontab 定时执行shell脚本,每天按照设定的时间自动备份前一天的日志,下面为 通过shell脚本实现每天日志文件自动切割。
shell脚本文件 autolog.sh 内容如下:

#! /bin/bash 
#Nginx 日志目录
base_path=/usr/local/nginx/logs
#Nginx备份日志文件存放的目录
bak_path=$base_path/bak
#检测备份日志目录是否存在
[ ! -d $bak_path ] && mkdir -p  $base_path/bak
#备份自志文件
test -f $base_path/access.log &&mv  $base_path/access.log   $bak_path/access_$(date +"%Y%m%d%H%M%S").log
#重新打开 Nginx 日志
/usr/local/nginx/sbin/nginx -s reopen

在这里插入图片描述
接着,为 autolog.sh 脚本文件设置可执行权限,具体如下。
chmod +x autolog.sh

开启定时任务
执行命令crontab -e 新增定时任务

0 0 * * * bash /root/re_open_nginx.sh

如下图,每天凌晨十二点执行日志文件切割
在这里插入图片描述

附录crontab 参数字段释义

在这里插入图片描述


版权声明:本文为qq_31024251原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。