- 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
- 结果如下