最近在重新搭建服务器,遇到了Nginx日志过大需要切割的问题,在查阅相关文档后发现网上的普遍做法是移动指定的access.log到指定文件夹下。而这和我想把每个log文件分天保存略有差异故记录此文。
为什么分割
Nginx下通过对.conf
文件配置access_log
来实现Nginx记录请求日志,如下配置就是将日志保存在wwwlogs目录下.
server{
access_log /home/wwwlogs/XXXXX.log;
}
而我们有许多Web服务的时候就会有很多这里的log文件
,同时请求量一大就会有很多日志,日志文件一大就会拖慢处理速度,故我们需要对日志进行定期分割。
如何分割
这里按照主流做法,每日定期将.log
文件移动到指定目录下,再通知Nginx重新创建.log
文件。
#! /bin/bash
base_path='/home/wwwlogs'
date=$(date -d "yesterday" +"%Y-%m-%d")
mkdir -p $base_path/$date
mv $base_path/*.log $base_path/$date/
sudo kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
如何定时
这里直接借助crontab
来实现定时执行:
0 1 * * * /home/littleor/shell/log_segmentation.sh
上述为每日凌晨1点执行,具体使用可通过
man crontab
查看