• NGINX按天切割日志

偶然发现access.log有46G大,所以将其切割。

Nginx 是一个非常轻量的 Web 服务器,体积小、性能高、速度快等诸多优点。但不足的是也存在缺点,比如其产生的访问日志文件一直就是一个,不会自动地进行切割,如果访问量很大的话,将 导致日志文件容量非常大,不便于管理。当然了,我们也不希望看到这么庞大的一个访问日志文件,那需要手动对这个文件进行切割。

在 Linux 平台上 Shell 脚本丰富,使用 Shell 脚本+crontab 命令能非常方便地进行切割,操作简单,方便快捷。


  • 日志文件切割要求

由于 Nginx 的日志都是写在一个文件当中的,因此,我们需要每天零点将前一天的日志存为另外一个文件,这里我们就将 Nginx 位于 logs 目录中的 access.log 存为 access_[yyyy-MM-dd].log 的文件。

    

  • SHELL脚本代码

#vim nginx.sh


#!/bin/bash

logs_path=/alidata/server/nginx/logs                    ## Nginx 日志文件所在的目录

today=$(date -d "today" +%Y-%m-%d)                     ## 获取昨天的 yyyy-MM-dd

mv ${logs_path}/access.log ${logs_path}/access_${today}.log     ##移动到指定路径

kill -USR1 $(cat /alidata/server/nginx/logs/nginx.pid)       ##向 Nginx 主进程发送 USR1 信号。USR1 信号是重新打开日志文件


上面这个脚本中的最后一行必须向 Nginx 的进程发送 USR1 信号以重新打开日志文件,如果不写的话,Nginx 会继续将日志信息写入 access_[yyyy-MM-dd].log 的那个文件中,这显然是不正确的。


给脚本权限

#chmod +x /root/nginx.sh


  • 加入到crontab里

#crontab -e

59 23 * * * /root/nginx.sh


  • 结果如下

wKioL1g-P7TC_7rHAACkyuR9kQY644.png-wh_50