Nginx日志切割脚本实践

因为nginx存放的日志文件逐渐增大,导致日后想察看某个时间的日志的时候,打开巨大文件所带来的性能代价和时间定位查找麻烦,因此需要对日志文件按照时间和频率进行切割。切割过程如下:

  1. 创建当前时间目录,比如年/月目录
  2. 然后将当前指定的日志,剪切到该创建好的目录下
  3. 重启nginx服务,重新生成0kb大小的新日志文件
  4. 通过计划任务,周期性执行以上切割日志,重新生成日志的操作就能达到既让日志文件保持一定大小而且又能按照指定的时间格式和目录进行存放。方面查询的便利和文件打开的快速。

切割脚本代码如下:

 1 #!/bin/bash

 2 

 3 #原nginx日志存放路径

 4 log_files_path="/home/wwwlogs/"

 5 

 6 #nginx切割后存放路径

 7 log_files_dir=${log_files_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")

 8 

 9 #待切割日志名称集合如access.log error.log

10 log_files_name=(access error)

11 

12 #nginx启动脚本路径

13 nginx_sbin="/usr/local/nginx/sbin/nginx"

14 

15 #日志保存时间

16 save_days=30

17 

18 #创建存放目录

19 mkdir -p $log_files_dir

20 

21 log_files_num=${#log_files_name[@]}

22 

23 #循环切割日志

24 for((i=0;i<$log_files_num;i++));do

25 mv ${log_files_path}${log_files_name[i]}.log ${log_files_dir}/${log_files_name[i]}_$(date -d "yesterday" +"%Y%m%d").log

26 done

27 

28 #删除超过30天的日志文件

29 find $log_files_path -mtime +$save_days -exec rm -rf {} \;

30 

31 #重启nginx服务,重新生成新的文件

32 $nginx_sbin -s reload

脚本放好后,接下来就可以创建一个计划任务来执行这个脚本,首先给这个脚本授予可执行权限:

chmod +x cut_nginx_logs.sh

然后创建计划任务:

riqi@ubuntu:~$ crontab -e

添加一行任务:

00 00 * * * /bin/bash /home/crontab/cut_nginx_logs.sh

 

你可能感兴趣的:(nginx)