1. 问题提出
nginx的日志没有切分,会非常大,不利于日志的删除和查看

2. 解决思路
- 写一个脚本,去切分日志
- 使用crontab写一个定时任务,每天切一个。
3. 解决流程
脚本时别人的,拿过来用。
3.1 新建切割日志的脚本/opt/sh/cutlogs.sh
内容如下:
#!/bin/bash
# 指定日志和切割后日志备份的目录
YEAR=$(date +%Y)
MONTH=$(date +%m)
DAY=$(date +%d)
YESTERDAY=$(date -d "yesterday" +%Y-%m-%d)
LOGS_PATH=/data/docker/saber/logs
LOGS_BAK_PATH=/data/docker/saber/logs-bak
# 得到1级目录名
if [[ $(($DAY)) -eq 1 ]]
then
if [[ $(($MONTH)) -eq 1 ]]
then
LOGS_BAK_PATH=$LOGS_BAK_PATH/$((${YEAR}-1))-12
else
if [[ $(($MONTH)) -gt 10 ]]
then
LOGS_BAK_PATH=$LOGS_BAK_PATH/${YEAR}-$((${MONTH}-1))
else
LOGS_BAK_PATH=$LOGS_BAK_PATH/${YEAR}-0$((${MONTH}-1))
fi
fi
else
LOGS_BAK_PATH=$LOGS_BAK_PATH/${YEAR}-${MONTH}
fi
# 创建目录
mkdir -p $LOGS_BAK_PATH/${YESTERDAY}
# 复制当前的日志文件到备份的目录
cp ${LOGS_PATH}/access.log ${LOGS_BAK_PATH}/${YESTERDAY}/access_${YESTERDAY}.log
#cp ${LOGS_PATH}/admin_access.log ${LOGS_BAK_PATH}/${YESTERDAY}/admin_access_${YESTERDAY}.log
cp ${LOGS_PATH}/error.log ${LOGS_BAK_PATH}/${YESTERDAY}/error_${YESTERDAY}.log
# 清空日志
> ${LOGS_PATH}/access.log
#> ${LOGS_PATH}/admin_access.log
> ${LOGS_PATH}/error.log
3.2 写crontab定时任务
crontab -e
打开crontab
写入任务,每天1点跑定时任务:
0 1 * * * sh /opt/sh/cutlogs.sh >> /opt/sh/cutlogs.log
3.3 结果
结果如下:
日志全部在/data/docker/saber/logs-bak目录下

logs-bak下面是月

月下面是天

天下面是文件

4. 总计
- 使用脚本去做切分
- 使用定时器去每天跑脚本。
到此这篇关于分割nginx日志的实现(避免日志多大)的文章就介绍到这了,更多相关分割nginx日志内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

